Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nikolay-govorov/nanoid
A tiny, secure, URL-friendly, unique string ID generator for Rust
https://github.com/nikolay-govorov/nanoid
id random url uuid
Last synced: about 2 months ago
JSON representation
A tiny, secure, URL-friendly, unique string ID generator for Rust
- Host: GitHub
- URL: https://github.com/nikolay-govorov/nanoid
- Owner: nikolay-govorov
- License: mit
- Created: 2017-12-26T18:31:40.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2023-06-17T22:58:47.000Z (over 1 year ago)
- Last Synced: 2024-04-23T23:15:08.893Z (5 months ago)
- Topics: id, random, url, uuid
- Language: Rust
- Homepage: https://docs.rs/nanoid
- Size: 102 KB
- Stars: 503
- Watchers: 4
- Forks: 30
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Nano ID
[![Package version](https://img.shields.io/crates/v/nanoid.svg)](https://crates.io/crates/nanoid)
[![License](https://img.shields.io/badge/license-MIT%20License-blue.svg)](https://github.com/nikolay-govorov/nanoid/blob/main/LICENSE)
[![Build](https://github.com/nikolay-govorov/nanoid/actions/workflows/test.yml/badge.svg)](https://github.com/nikolay-govorov/nanoid/actions/workflows/test.yml)A tiny, secure, URL-friendly, unique string ID generator for Rust
```rust
use nanoid::nanoid;fn main() {
let id = nanoid!(); //=> "Yo1Tr9F3iF-LFHX9i9GvA"
}
```**Safe.** It uses cryptographically strong random APIs
and guarantees a proper distribution of symbols.**Compact.** It uses a larger alphabet than UUID (`A-Za-z0-9_-`)
and has a similar number of unique IDs in just 21 symbols instead of 36.## Usage
### Install
```toml
[dependencies]
nanoid = "0.4.0"
```### Simple
The main module uses URL-friendly symbols (`A-Za-z0-9_-`) and returns an ID
with 21 characters.```rust
use nanoid::nanoid;fn main() {
let id = nanoid!(); //=> "Yo1Tr9F3iF-LFHX9i9GvA"
}
```Symbols `-,.()` are not encoded in the URL. If used at the end of a link
they could be identified as a punctuation symbol.### Custom length
If you want to reduce ID length (and increase collisions probability),
you can pass the length as an argument generate function:```rust
use nanoid::nanoid;fn main() {
let id = nanoid!(10); //=> "IRFa-VaY2b"
}
```### Custom Alphabet or Length
If you want to change the ID's alphabet or length, you can simply pass the
custom alphabet to the `nanoid!()` macro as the second parameter:```rust
use nanoid::nanoid;fn main() {
let alphabet: [char; 16] = [
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f'
];let id = nanoid!(10, &alphabet); //=> "4f90d13a42"
}
```Alphabet must contain 256 symbols or less.
Otherwise, the generator will not be secure.### Custom Random Bytes Generator
You can replace the default safe random generator using the `complex` module.
For instance, to use a seed-based generator.```rust
use nanoid::nanoid;fn random_byte () -> u8 { 0 }
fn main() {
fn random (size: usize) -> Vec {
let mut bytes: Vec = vec![0; size];for i in 0..size {
bytes[i] = random_byte();
}bytes
}nanoid!(10, &['a', 'b', 'c', 'd', 'e', 'f'], random); //=> "fbaefaadeb"
}
````random` function must accept the array size and return an vector
with random numbers.If you want to use the same URL-friendly symbols with `format`,
you can get the default alphabet from the `url` module:```rust
use nanoid::nanoid;fn random (size: usize) -> Vec {
let result: Vec = vec![0; size];result
}fn main() {
nanoid!(10, &nanoid::alphabet::SAFE, random); //=> "93ce_Ltuub"
}
```## Other Programming Languages
* [JS](https://github.com/ai/nanoid)
* [C#](https://github.com/codeyu/nanoid-net)
* [Crystal](https://github.com/mamantoha/nanoid.cr)
* [Go](https://github.com/matoous/go-nanoid)
* [Elixir](https://github.com/railsmechanic/nanoid)
* [Haskell](https://github.com/4e6/nanoid-hs)
* [Java](https://github.com/aventrix/jnanoid)
* [Nim](https://github.com/icyphox/nanoid.nim)
* [PHP](https://github.com/hidehalo/nanoid-php)
* [Python](https://github.com/puyuan/py-nanoid)
* [Ruby](https://github.com/radeno/nanoid.rb)