by alco

Stringify your ids

208 Stars 11 Forks Last release: Not found MIT License 77 Commits 8 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Build status Hex version Hex downloads

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"}]


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]}

Migrating from 1.0

See the changelog.


This software is licensed under the MIT license.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.