Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sqids/sqids-crystal
Official Crystal port of Sqids. Generate short unique IDs from numbers.
https://github.com/sqids/sqids-crystal
crystal hashids id id-generator short-id short-url sqids uid unique-id unique-id-generator
Last synced: about 2 months ago
JSON representation
Official Crystal port of Sqids. Generate short unique IDs from numbers.
- Host: GitHub
- URL: https://github.com/sqids/sqids-crystal
- Owner: sqids
- License: mit
- Created: 2023-06-24T15:35:00.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-26T18:26:59.000Z (about 1 year ago)
- Last Synced: 2024-10-06T03:05:52.044Z (3 months ago)
- Topics: crystal, hashids, id, id-generator, short-id, short-url, sqids, uid, unique-id, unique-id-generator
- Language: Crystal
- Homepage: https://sqids.org/crystal
- Size: 12.7 KB
- Stars: 13
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# [Sqids Crystal](https://sqids.org/crystal)
Sqids (pronounced "squids") is a small library that lets you generate YouTube-looking IDs from numbers. It's good for link shortening, fast & URL-safe ID generation and decoding back into numbers for quicker database lookups.
## Getting started
Add the dependency to your `shard.yml`:
```yaml
dependencies:
sqids:
github: sqids/sqids-crystal
```And then execute:
```sh
shards install
```## Examples
Simple encode & decode:
```crystal
sqids = Sqids.new
id = sqids.encode([1, 2, 3]) # "86Rf07"
numbers = sqids.decode(id) # [1, 2, 3]
```> **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:
```crystal
sqids = Sqids.new(min_length: 10)
id = sqids.encode([1, 2, 3]) # "86Rf07xd4z"
numbers = sqids.decode(id) # [1, 2, 3]
```Randomize IDs by providing a custom alphabet:
```crystal
sqids = Sqids.new(alphabet: "FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE")
id = sqids.encode([1, 2, 3]) # "B4aajs"
numbers = sqids.decode(id) # [1, 2, 3]
```Prevent specific words from appearing anywhere in the auto-generated IDs:
```crystal
sqids = Sqids.new(blocklist: Set.new(%w[86Rf07]))
id = sqids.encode([1, 2, 3]) # "se8ojk"
numbers = sqids.decode(id) # [1, 2, 3]
```## License
[MIT](LICENSE)