---
name: "Number::RecordLocator"
section: "3pm"
platform: "linux"
package: "libnumber-recordlocator-perl"
version: "0.005-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Number::RecordLocator"
---

# Number::RecordLocator(3pm)

Encodes integers into a short and easy to read and pronounce "locator string"

## NAME

Number::RecordLocator - Encodes integers into a short and easy to read and pronounce "locator string"

## SYNOPSIS

```
    use Number::RecordLocator;
    my $generator = Number::RecordLocator->new();
    my $string = $generator->encode("123456");
    # $string = "5RL2";
    my $number = $generator->decode($string);

    # $number = "123456";
```

## DESCRIPTION

`"Number::RecordLocator"` encodes integers into a 32 character "alphabet"  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 `"Number::RecordLocator"` 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 INTEGER

Takes an integer. Returns a Record Locator string.

### decode STRING

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

### canonicalize STRING

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 "DESCRIPTION" applied to it. This allows string comparisons to work. This returns `"undef"` 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 `"bug-number-recordlocator@rt.cpan.org"`, or through the web interface at \<http://rt.cpan.org\>.

## AUTHOR

Jesse Vincent  `"<jesse@bestpractical.com>"`

## LICENCE AND COPYRIGHT

Copyright (c) 2006, Best Practical Solutions, LLC.  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.
