A tiny, secure, URL-friendly, unique string ID generator for Rust
extern crate nanoid;
fn main() {
let id = nanoid::simple(); //=> "Uakgb_J5m9g~0JDMbcJqLJ"
}
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.
The main module uses URL-friendly symbols (A-Za-z0-9_~
) and returns an ID
with 21 characters.
extern crate nanoid;
fn main() {
let id = nanoid::simple(); //=> "Uakgb_J5m9g~0JDMbcJqLJ"
}
Symbols -,.()
are not encoded in the URL. If used at the end of a link
they could be identified as a punctuation symbol.
If you want to reduce ID length (and increase collisions probability), you can pass the length as an argument generate function:
extern crate nanoid;
fn main() {
let id = nanoid::generate(10); //=> "IRFa~VaY2b"
}
If you want to change the ID's alphabet or length
you can use the low-level custom
module.
extern crate 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::custom(10, &alphabet); //=> "4f90d13a42"
}
Alphabet must contain 256 symbols or less. Otherwise, the generator will not be secure.
You can replace the default safe random generator using the complex
module.
For instance, to use a seed-based generator.
extern crate nanoid;
fn randomByte () -> u8 { 0 }
fn main() {
fn random (size: usize) -> Vec<u8> {
let mut bytes: Vec<u8> = vec![0; size];
for i in 0..size {
bytes[i] = randomByte();
}
bytes
}
nanoid::complex(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:
extern crate nanoid;
fn random (size: usize) -> Vec<u8> {
let result: Vec<u8> = vec![0; size];
result
}
fn main() {
nanoid::complex(10, &nanoid::alphabet::SAFE, random); //=> "93ce_Ltuub"
}