SYNOPSIS

    use Number::RecordLocator;

    my $generator = Number::RecordLocator->new();
    my $string = $generator->encode("123456");

    # $string = "5RL2";

    my $number = $generator->decode($string);

    # $number = "123456";

DESCRIPTION

\*(C`Number::RecordLocator\*(C' encodes integers into a 32 character \*(L"alphabet\*(R" designed to be short and easy to read and pronounce. The encoding maps:

0 to O 1 to I S to F B to P

With a 32 bit encoding, you can map 33.5 million unique ids into a 5 character code.

This certainly isn't an exact science and I'm not yet 100% sure of the encoding. Feedback is much appreciated.

new

Instantiate a new \*(C`Number::RecordLocator\*(C' object. Right now, we don't actually store any object-specific data, but in the future, we might.

init

Initializes our integer to character and character to integer mapping tables.

encode \s-1INTEGER\s0

Takes an integer. Returns a Record Locator string.

decode \s-1STRING\s0

Takes a record locator string and returns an integer. If you pass in a string containing an invalid character, it returns undef.

canonicalize \s-1STRING\s0

To compare a Record Locator string with another you can do:

print "ALWAYS TRUE\n" if $generator->decode("B0") == $generator->decode("PO");

However, this method provides an alternative:

my $rl_string = $generator->encode(725); print "ALWAYS TRUE\n" if $generator->canonicalize("b0") eq $rl_string; print "ALWAYS TRUE\n" if $generator->canonicalize("BO") eq $rl_string; print "ALWAYS TRUE\n" if $generator->canonicalize("P0") eq $rl_string; print "ALWAYS TRUE\n" if $generator->canonicalize("po") eq $rl_string;

This is primarily useful if you store the record locator rather than just the original integer and don't want to have to decode your strings to do comparisons.

Takes a general Record Locator string and returns one with character mappings listed in \*(L"\s-1DESCRIPTION\s0\*(R" applied to it. This allows string comparisons to work. This returns \*(C`undef\*(C' if a non-alphanumeric character is found in the string.

BUGS AND LIMITATIONS

No bugs have been reported.

Please report any bugs or feature requests to \*(C`[email protected]\*(C', or through the web interface at <http://rt.cpan.org>.

AUTHOR

Jesse Vincent \*(C`<[email protected]>\*(C'

LICENCE AND COPYRIGHT

Copyright (c) 2006, Best Practical Solutions, \s-1LLC\s0. All rights reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.