package sqids

  1. Overview
  2. Docs
OCaml port of Sqids

Install

Dune Dependency

Authors

Maintainers

Sources

0.1.0.tar.gz
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

MIT

Dependencies (2)

  1. dune >= "3.13"
  2. ocaml >= "4.11.0"

Dev Dependencies (4)

  1. odoc with-doc
  2. ocamlformat with-dev-setup & >= "0.26.1"
  3. ocaml-lsp-server with-dev-setup
  4. qcheck-core with-test & >= "0.21.3"

Used by

None

Conflicts

None