Stringify your ids
Hashids lets you obfuscate numerical identifiers via reversible mapping.
This is a port of Hashids from JavaScript.
Add Hashids as a dependency to your Mix project:
defp deps do [{:hashids, "~> 2.0"}] end
Hashids encodes a list of integers into a string (technically, iodata). 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 a custom alphabet. It has to be at least 16 characters long.
defmodule MyAccessToken do @cyrillic_alphabet "123456789абвгґдеєжзиіїйклмнопрстуфцчшщьюяАБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФЦЧШЩЬЮЯ" @coder Hashids.new(alphabet: @cyrillic_alphabet)def encode(token_ids) do Hashids.encode(@coder, token_ids) end
def decode(data) do Hashids.decode(@coder, data) end end
data = MyAccessToken.encode([1234, 786, 21, 0]) #=> "ЦфюєИНаЛ1И"
MyAccessToken.decode(data) #=> {:ok, [1234, 786, 21, 0]}
See the changelog.
This software is licensed under the MIT license.