Metadata-Version: 2.1
Name: nanoid
Version: 2.0.0
Summary: A tiny, secure, URL-friendly, unique string ID generator for Python
Home-page: https://github.com/puyuan/py-nanoid
Author: Paul Yuan
Author-email: puyuan1@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Operating System :: OS Independent
Classifier: Topic :: Utilities
Description-Content-Type: text/markdown

# Nano ID

[![CircleCI](https://circleci.com/gh/puyuan/py-nanoid/tree/master.svg?style=svg)](https://circleci.com/gh/puyuan/py-nanoid/tree/master)

A tiny, secure, URL-friendly, unique string ID generator for Python.

* __Safe__. It uses cryptographically strong random APIs and tests distribution of symbols;
* __Compact__. It uses a larger alphabet than UUID (A-Za-z0-9_-). So ID size was reduced from 36 to 21 symbols.

## Usage

Install Nano ID using pip:

```
pip install nanoid
```

### Normal

The main module uses URL-friendly symbols (A-Za-z0-9_-) and returns an ID with 21 characters (to have a collision probability similar to UUID v4).


```python
from nanoid import generate

generate() # => NDzkGoTCdRcaRyt7GOepg
```

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.

```python
from nanoid import generate

generate(size=10) # => "IRFa-VaY2b"

```

Don’t forget to check the safety of your ID length in ID [collision probability calculator](https://zelark.github.io/nano-id-cc/).


## Custom Alphabet or Length

If you want to change the ID's alphabet or length you can use the internal generate module.

```python
from nanoid import generate

generate('1234567890abcdef', 10) # => "4f9zd13a42"
```

Non-secure API is also available:

```python
from nanoid import non_secure_generate

non_secure_generate('1234567890abcdef', 10)
```

## Tools

* [ID size calculator](https://zelark.github.io/nano-id-cc/) to choice smaller ID size depends on your case.
nanoid-dictionary with popular alphabets to use with nanoid/generate;
* [`nanoid-dictionary`](https://github.com/aidarkhanov/py-nanoid-dictionary) with popular alphabets to use.



## Other Programming Languages

* [C#](https://github.com/codeyu/nanoid-net)
* [Clojure and ClojureScript](https://github.com/zelark/nano-id)
* [Crystal](https://github.com/mamantoha/nanoid.cr)
* [Dart](https://github.com/pd4d10/nanoid)
* [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)
* [JavaScript](https://github.com/ai/nanoid)
* [Nim](https://github.com/icyphox/nanoid.nim)
* [PHP](https://github.com/hidehalo/nanoid-php)
* [Ruby](https://github.com/radeno/nanoid.rb)
* [Rust](https://github.com/nikolay-govorov/nanoid)
* [Swift](https://github.com/antiflasher/NanoID)


## Changelog
- v2.0.0
    - Replace ~ to - in default alphabet
    - Add non-secure fast generator
    - Reduce default characters from 22 to 21
- v0.3.0
    - Fix array out of bound error.

## Credits

- Andrey Sitnik for [Nano ID](https://github.com/ai/nanoid);
- [Dair Aidarkhanov](https://github.com/aidarkhanov) for main contribution to v2.0, and adding test cases.
- Aleksandr Zhuravlev for [ID collision probability](https://zelark.github.io/nano-id-cc/).
