Hashids

Build statusHex versionHex downloads

Hashids lets you obfuscate numerical identifiers via reversible mapping.

This is a port of Hashids from JavaScript.

Installation

Add Hashids as a dependency to your Mix project:

defp deps do
[{:hashids, "~> 2.0"}]
end

Usage

Hashids encodes a list of integers into a char list. Some of the encoding parameters can be customized.

s = Hashids.new([
salt: "123", # using a custom salt helps producing unique cipher text
min_len: 2, # minimum length of the cipher text (1 by default)
])
cipher1 = Hashids.encode(s, 129)
#=> "pE6"
cipher2 = Hashids.encode(s, [1,2,3,4])
#=> "4bSwImsd"
# decode() always returns a list of numbers
Hashids.decode(s, cipher1)
#=> {:ok, [129]}
Hashids.decode!(s, cipher2)
#=> [1, 2, 3, 4]

It is also possible to customize the character set used for the cipher text by providing an alphabet as a char list. It has to be at least 16 characters long.

s = Hashids.new(alphabet: "1234567890абвгдежизклмн")
cipher = Hashids.encode(s, [1234, 786, 21, 0])
#=> "имнк40же3ги1з"
Hashids.decode(s, cipher)
#=> {:ok, [1234, 786, 21, 0]}

Migrating from 1.0

See the changelog.

License

This software is licensed under the MIT license.