All Projects → nikolay-govorov → Nanoid

nikolay-govorov / Nanoid

Licence: mit
A tiny, secure, URL-friendly, unique string ID generator for Rust

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Nanoid

micell
A collection of functions for front-end development
Stars: ✭ 16 (-91.49%)
Mutual labels:  url, uuid
ruuid
A fast uuid generator in Python using Rust
Stars: ✭ 19 (-89.89%)
Mutual labels:  uuid, random
Session Token
Secure, efficient, simple random session token generation
Stars: ✭ 12 (-93.62%)
Mutual labels:  random, uuid
utils.js
👷 🔧 zero dependencies vanilla JavaScript utils.
Stars: ✭ 14 (-92.55%)
Mutual labels:  url, random
secrets.clj
A library designed to generate cryptographically strong random numbers.
Stars: ✭ 64 (-65.96%)
Mutual labels:  uuid, random
Uniuri
Go package uniuri generates random strings good for use in URIs to identify unique objects.
Stars: ✭ 336 (+78.72%)
Mutual labels:  random, uuid
Kirby3 Autoid
Automatic unique ID for Pages, Files and Structures including performant helpers to retrieve them. Bonus: Tiny-URL.
Stars: ✭ 58 (-69.15%)
Mutual labels:  random, uuid
Ui Design Resources
UI设计资源收集
Stars: ✭ 154 (-18.09%)
Mutual labels:  url
Nyaya
Random Data Generation and/or Property Testing in Scala & Scala.JS.
Stars: ✭ 165 (-12.23%)
Mutual labels:  random
Tldts
JavaScript Library to work against complex domain names, subdomains and URIs.
Stars: ✭ 151 (-19.68%)
Mutual labels:  url
Urlshorting
A simple but powerful URL shortener
Stars: ✭ 150 (-20.21%)
Mutual labels:  url
Randomdata
Random data generator
Stars: ✭ 157 (-16.49%)
Mutual labels:  random
Modernsearchbar
The famous iOS search bar with auto completion feature implemented.
Stars: ✭ 167 (-11.17%)
Mutual labels:  url
Purl Spec
A minimal specification for purl aka. a package "mostly universal" URL, join the discussion at https://gitter.im/package-url/Lobby
Stars: ✭ 154 (-18.09%)
Mutual labels:  url
Urlbuilder
Java Builders: URL builder
Stars: ✭ 174 (-7.45%)
Mutual labels:  url
Randomatic
Easily generate random strings like passwords, with simple options for specifying a length and for using patterns of numeric, alpha-numeric, alphabetical, special or custom characters. (the original "generate-password")
Stars: ✭ 149 (-20.74%)
Mutual labels:  random
Id Generator
生成带校验码的卡号、19位的Long ID、不大于22位的短UUID、短卡号、激活码、数字加密、付款码。分布式、基于内存、安全可靠、性能高。
Stars: ✭ 180 (-4.26%)
Mutual labels:  uuid
Lua Resty Jit Uuid
Fast and dependency-free UUID library for LuaJIT/ngx_lua
Stars: ✭ 169 (-10.11%)
Mutual labels:  uuid
Parseurl
parse a url with memoization
Stars: ✭ 162 (-13.83%)
Mutual labels:  url
Faup
Fast URL decoder library
Stars: ✭ 159 (-15.43%)
Mutual labels:  url

Nano ID

Package version License Travis build status Appveyor build status Maintenance intention for this crate

A tiny, secure, URL-friendly, unique string ID generator for 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

[dependencies]
nanoid = "0.3.0"

Simple

The main module uses URL-friendly symbols (A-Za-z0-9_-) and returns an ID with 21 characters.

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:

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:

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.

use nanoid::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!(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:

use nanoid::nanoid;

fn random (size: usize) -> Vec<u8> {
    let result: Vec<u8> = vec![0; size];

    result
}

fn main() {
    nanoid!(10, &nanoid::alphabet::SAFE, random); //=> "93ce_Ltuub"
}

Other Programming Languages

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].