Skip to content

alco/hashids-elixir

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Hashids

Module Version Hex Docs Total Download License Last Updated

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 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.

License

This software is licensed under the MIT license.

About

Stringify your ids

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages