package sqids
Install
Dune Dependency
Authors
Maintainers
Sources
md5=3ca341fc0dba4b556cc67ca2b9767a15
sha512=d56fd8ae742db5b5096b4e14390825233701f2e7af10e9b2d5bd92370ecf22b6de990cdf686f80445b01ef96d1d23166b5b6c998efd8dcb0749a576cc5e68395
Description
Generate short unique IDs from numbers.
Published: 12 Feb 2024
README
Sqids OCaml
Sqids (pronounced "squids") is a small library that lets you generate unique IDs from numbers. It's good for link shortening, fast & URL-safe ID generation and decoding back into numbers for quicker database lookups.
Features:
Encode multiple numbers - generate short IDs from one or several non-negative numbers
Quick decoding - easily decode IDs back into numbers
Unique IDs - generate unique IDs by shuffling the alphabet once
ID padding - provide minimum length to make IDs more uniform
URL safe - auto-generated IDs do not contain common profanity
Randomized output - Sequential input provides nonconsecutive IDs
Many implementations - Support for 40+ programming languages
๐งฐ Use-cases
Good for:
Generating IDs for public URLs (eg: link shortening)
Generating IDs for internal systems (eg: event tracking)
Decoding for quicker database lookups (eg: by primary keys)
Not good for:
Sensitive data (this is not an encryption library)
User IDs (can be decoded revealing user count)
๐ Getting started
Install:
opam install sqids
Add to dune-project
:
(sqids (= 0.1.0))
Add to dune
for your target:
(libraries sqids)
Try in utop
:
# require "sqids";;
let s = Sqids.make () in
Sqids.encode s [1; 2; 3]
๐ฉโ๐ป Examples
Simple encode & decode:
Enforce a minimum length for IDs:
let sqids = Sqids.make ~min_length:10 () in
let id = Sqids.encode sqids [1; 2; 3] in (* "86Rf07xd4z" *)
let numbers = Sqids.decode sqids id in (* [1; 2; 3] *)
Randomize IDs by providing a custom alphabet:
let sqids = Sqids.make ~alphabet:"FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE" () in
let id = Sqids.encode sqids [1; 2; 3] in (* "B4aajs" *)
let numbers = Sqids.decode sqids id in (* [1; 2; 3] *)
Prevent specific words from appearing anywhere in the auto-generated IDs:
let sqids = Sqids.make ~blocklist:["86Rf07"] () in
let id = Sqids.encode sqids [1; 2; 3] in (* "se8ojk" *)
let numbers = Sqids.decode sqids id in (* [1; 2; 3] *)
๐ License
Dev Dependencies (4)
-
odoc
with-doc
-
ocamlformat
with-dev-setup & >= "0.26.1"
-
ocaml-lsp-server
with-dev-setup
-
qcheck-core
with-test & >= "0.21.3"
Used by
None
Conflicts
None