https://github.com/sqids/sqids-ocaml
Official OCaml port of Sqids. Generate short unique IDs from numbers.
https://github.com/sqids/sqids-ocaml
hashids id id-generator ocaml short short-id sqids uid unique-id unique-id-generator
Last synced: 14 days ago
JSON representation
Official OCaml port of Sqids. Generate short unique IDs from numbers.
- Host: GitHub
- URL: https://github.com/sqids/sqids-ocaml
- Owner: sqids
- License: mit
- Created: 2023-06-24T15:33:11.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-10T18:05:54.000Z (almost 2 years ago)
- Last Synced: 2024-06-28T12:34:28.929Z (over 1 year ago)
- Topics: hashids, id, id-generator, ocaml, short, short-id, sqids, uid, unique-id, unique-id-generator
- Language: OCaml
- Homepage: https://sqids.org/ocaml
- Size: 535 KB
- Stars: 10
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ocaml - sqids-ocaml - Official OCaml port of Sqids. Generate short unique IDs from numbers. (Utilities)
README
# [Sqids OCaml](https://sqids.org/ocaml)
[](https://ocaml.ci.dev/github/sqids/sqids-ocaml)
[Sqids](https://sqids.org/ocaml) (*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](https://sqids.org/)
## 🧰 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:
```shell
opam install sqids
```
Add to `dune-project`:
```text
(sqids (= 0.1.0))
```
Add to `dune` for your target:
```text
(libraries sqids)
```
Try in `utop`:
```ocaml
# require "sqids";;
let s = Sqids.make () in
Sqids.encode s [1; 2; 3]
```
## 👩💻 Examples
Simple encode & decode:
> **Note**
> 🚧 Because of the algorithm's design, **multiple IDs can decode back into the same sequence of numbers**. If it's important to your design that IDs are canonical, you have to manually re-encode decoded numbers and check that the generated ID matches.
Enforce a *minimum* length for IDs:
```ocaml
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:
```ocaml
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:
```ocaml
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](LICENSE)