[Catalyst] Confirmations numbers for Humans
Roman Filippov
moltar at spamcop.net
Thu Mar 2 17:56:52 CET 2006
Nathan Kurz wrote:
> On Thu, Mar 02, 2006 at 07:31:07AM -0800, Bill Moseley wrote:
>> I'm curious about those short airline confirmation ids.
>> My last airline confirmation number was BU8743, which is a lot easier
>> to say over the phone than, say, a UUID or md5 hash. But, their
>> unique-ness is, well, less unique. I assume those confirmation
>> numbers are only valid for some defined period of time.
>>
>> Is anyone generating short ids like those airline confirmation
>> numbers?
>>
>> How are you generating them and what actions do you use to
>> keep them unique? What's your system for deciding when to purge old
>> ids and how to recycle them? If you do purge them, do you have a
>> separate way to lookup a transaction after they are purged?
>>
>> I suppose to create them I could truncate a MD5 hash and then test the
>> database to see if it exists (using a serializable transaction
>> isolation level). I've used other metheds such as creating a random
>> hex number and appending a day number sequence.
>
> This isn't directly applicable to your problem, but for a prototype
> I'm working on I'm doing something like this:
>
> # generate a token to be used for confirmation of email address
> my @chars = ('a'..'z', 'A'..'Z', 0..9);
> my $token;
> for my $try (1..5) {
> $token = join '', map $chars[rand @chars], 0..16;
> my $count = Notate::Model::DB::Request->count({token => $token});
> last unless $count;
> $c->log->error("duplicate token '$token' ($try)");
> die "Could not generate a new token" if ($try > 4);
> }
>
> The useful line (grabbed from a web page I've long forgotten) is the
> "map $chars[rand @chars], 0..16;", which generates a random string of
> characters from your set of @chars of the length your desire (16 in
> this case). If one did a shorter string from a set of chars that are
> easy to read aloud, this might work for you. There are probably
> better ways to do all of this, but it's meeting my needs right now.
>
> Nathan Kurz
> nate at verse.com
You should probably use only the letters that are easy to spell and
cannot be confused with other letters. Like: A, C, E, etc...
More information about the Catalyst
mailing list