Skip to main content

Memorable Unique Identifier

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

muid-0.5.3.tar.gz (332.6 kB view details)

Uploaded Source

Built Distribution

muid-0.5.3-py3-none-any.whl (173.6 kB view details)

Uploaded Python 3

File details

Details for the file muid-0.5.3.tar.gz.

File metadata

  • Download URL: muid-0.5.3.tar.gz
  • Upload date:
  • Size: 332.6 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for muid-0.5.3.tar.gz
Algorithm Hash digest
SHA256 707bb649aa7c82745f64d25d91b532aacf0e468fe04421c19e268a2c9f856f24
MD5 79e01d7638355a5d6cf55699c9a50d1a
BLAKE2b-256 a28350e54e4173fc8dde0d3e645f24e99fb57db0a754d7f1dde1443a4b1a5214

See more details on using hashes here.

File details

Details for the file muid-0.5.3-py3-none-any.whl.

File metadata

  • Download URL: muid-0.5.3-py3-none-any.whl
  • Upload date:
  • Size: 173.6 kB
  • Tags: Python 3
  • Uploaded using 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

File hashes

Hashes for muid-0.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 164da2e8e33bc5e57bde6b879dd80963788e98ce93a82b2d3b33c6485a90e56b
MD5 abed9eb95cf2815457ed7972bd2619fc
BLAKE2b-256 9800b9ea2f1d68cea9b0fbd6f6507ab9c9952c92161d8898367c4add7b1d110e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page