Hashids
=======
[![Build status](https://travis-ci.org/alco/hashids-elixir.svg "Build status")](https://travis-ci.org/alco/hashids-elixir)
[![Hex version](https://img.shields.io/hexpm/v/hashids.svg "Hex version")](https://hex.pm/packages/hashids)
![Hex downloads](https://img.shields.io/hexpm/dt/hashids.svg "Hex downloads")
Hashids lets you obfuscate numerical identifiers via reversible mapping.
This is a port of [Hashids][1] from JavaScript.
[1]: http://www.hashids.org/
## Installation
Add Hashids as a dependency to your Mix project:
```elixir
defp deps do
[{:hashids, "~> 2.0"}]
end
```
## Usage
Hashids encodes a list of integers into a string (technically, iodata). Some of the encoding
parameters can be customized.
```elixir
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.
```elixir
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](CHANGELOG.md).
## License
This software is licensed under [the MIT license](LICENSE).