Skip to content
/ TinyID Public

Shorten and obfuscate IDs in Raku language.

License

Notifications You must be signed in to change notification settings

bbkr/TinyID

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shorten and obfuscate IDs in Raku language

test

SYNOPSIS

    use TinyID;
    
    my $key = ( 'a'..'z', 'A'..'Z', 0..9 ).flat.pick( * ).join;
    # example key is '2BjLhRduC6Tb8Q5cEk9oxnFaWUDpOlGAgwYzNre7tI4yqPvXm0KSV1fJs3ZiHM'
    
    my $tinyid = TinyID.new( key => $key );
    
    say $tinyid.encode( 48888851145 );  # will print '1FN7Ab'
    say $tinyid.decode( '1FN7Ab' );     # will print 48888851145

DESCRIPTION

With the help of this module you can shorten and obfuscate your IDs at the same time. Useful for:

  • Hiding real database IDs in URLs or REST APIs.
  • Saving space where it is limited, like in SMS or Push messages.

METHODS

new( key => 'qwerty' )

Keyt must consist of at least two unique unicode characters. The longer the key - the shorter encoded ID will be. Encoded ID will be made exclusively out of characters from the key.

Choose your key characters wisely, for example:

  • For SMS messages generate key from a-z,A-Z,0-9 range. You will get excellent shortening like 1234567890 -> 380FQs.
  • For NTFS file names generate key from a-z range. You will get good shortening and avoid case insensitivity collisions, like 1234567890 -> iszbmfx.
  • When trolling generate key from Emojis. So 1234567890 will be represented as 😣😄😹😧😋😳.

encode( 123 )

Encode unsigned integer into a string.

Note that this should not be considered a strong encryption. It does not contain consistency checks. And key is easy to reverse engineer with small amount of encoded/decoded samples given. Treat it as really, really fast obfuscation only.

decode( 'rer' )

Decode string back into unsigned integer.

TRICKS

If you provide sequential characters in key you can convert your numbers to some weird numeric systems, for example base18:

    TinyID.new( key => '0123456789ABCDEFGH' ).encode( 48888851145 ).say;    # '47F709HFF'

COMPATIBLE COUNTERPARTS

About

Shorten and obfuscate IDs in Raku language.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages