muid
Memorable Unique Identifiers
Wait you say ... that's an oxymoron
Memorable unique identifiers are a provocative misnomer. Yes, memorability is antithetical to uniqueness, and MUIDs might be better termed "hash-memorable" identifiers: identifiers whose SHA-256 hashes are in part memorable. There is a cheesy video explanation at https://vimeo.com/397352413
Start mining now
Just want to mine?
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/microprediction/muid/master/examples/mine_from_venv.sh)"
If it fails you might need Python 3
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install python
Using the library directly
As per https://muid.readthedocs.io/en/latest/ ...
Install
pip install muid
Hash-memorability
>>> muid.bhash(b'f601f291896bb66b8a3c3d783077713a')
b'56a33411a3ae7cfc95597911708358ad'
Don't see it?
>>> muid.pretty(b'56a33411a3ae7cfc95597911708358ad',k1=6,k2=5)
'Shammy Llama'
Create one MUID
>>> muid.create(difficulty=8, with_report=True)
[{'length': 8, 'pretty': 'Thof Clam', 'key': b'79f7faf8d1272b94eaac367972a09f7b', 'hash': b'760fc1a3368216b67a044e3d4da1fd85'}]
String version of hash
Use shash instead of bhash
>>> muid.shash('f601f291896bb66b8a3c3d783077713a')
56a33411a3ae7cfc95597911708358ad
Validation
>>> muid.animal(b'f601f291896bb66b8a3c3d783077713a')
'Shammy Llama'
>>> muid.validate(b'f601f291896bb66b8a3c3d783077713a')
True
Mining for multiple MUIDs
Runs forever and produces MUIDs of increasing length.
>>> muid.mine()
{'hash': b'56a33411a3ae7cfc95597911708358ad',
'key': b'f601f291896bb66b8a3c3d783077713a',
'length': 11,
'pretty': 'Shammy Llama'}
{'hash': b'6ea176470adcff53855f04181bca1a1b',
'key': b'fb74baf628d43892020d803614f91f29',
'length': 11,
'pretty': 'Healthy Toad'}
{'hash': b'a3e76457c0de70a153e82067845f1527',
'key': b'769adf0f307181e4ab2bc4c1b991cdc6',
'length': 11,
'pretty': 'Amethyst Cod'}
Bequeath unwanted MUIDs to a worthy statistician.
Applications
See the video at https://vimeo.com/397352413 for some motivation.
We hope you have an application that can benefit from one less join.
Implementation decisions
We welcome thoughtful suggestions at https://github.com/microprediction/muid/issues
Choice of hash
We truncate the output of hashlib.sha256 For example muid.shash('abe5') is equivalent to
sha256('abe5'.encode('ascii')).hexdigest()[:32]
Readable hex
| Hex | Human | Hex | HUman | Hex | Human |
|---|---|---|---|---|---|
| 1 | l | 5 | s | 9 | g |
| 2 | z | 6 | h | 0 | o |
| 3 | m | 7 | t | ||
| 4 | y | 8 | x |
Miscellaneous
Collisions
MUID collision requires approximately the same computational capacity as UUID collision, or more.
Thus unlikely to be an issue.
Release files for muid 0.5.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| muid-0.5.3.tar.gz | 332.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| muid-0.5.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 506.2 kB
Release files / muid-0.5.3.tar.gz
| Download URL | muid-0.5.3.tar.gz |
|---|---|
| Size | 332.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
707bb649aa7c82745f64d25d91b532aacf0e468fe04421c19e268a2c9f856f24
|
|
BLAKE2b-256 checksum How to use checksums |
a28350e54e4173fc8dde0d3e645f24e99fb57db0a754d7f1dde1443a4b1a5214
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
|
Release files / muid-0.5.3-py3-none-any.whl
| Download URL | muid-0.5.3-py3-none-any.whl |
|---|---|
| Size | 173.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
164da2e8e33bc5e57bde6b879dd80963788e98ce93a82b2d3b33c6485a90e56b
|
|
BLAKE2b-256 checksum How to use checksums |
9800b9ea2f1d68cea9b0fbd6f6507ab9c9952c92161d8898367c4add7b1d110e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
|