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.
Metadata
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 | Provenance | |
|---|---|---|---|---|
| muid-0.5.3.tar.gz | 332.6 kB | Without provenance | 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
|
Security for muid 0.5.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.