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.2.tar.gz (332.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: muid-0.5.2.tar.gz
  • Upload date:
  • Size: 332.4 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.7.12

File hashes

Hashes for muid-0.5.2.tar.gz
Algorithm Hash digest
SHA256 7966b2870f7d511d7d75b92b9097cc75cc62ff4a3b391c144c2063eeff80599f
MD5 86ac9ed8d048f37d37790014df4baec1
BLAKE2b-256 6d98b097aeb584c1c1d99482d3151e7513921697a6eb98d294e632c5ff01a017

See more details on using hashes here.

File details

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

File metadata

  • Download URL: muid-0.5.2-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.7.12

File hashes

Hashes for muid-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1e2b88d0f6761098a6cba3f060f88ba66bcdae07e702a415a511f60587062413
MD5 4db2f3f359ce6ff6fe2897455d0e833b
BLAKE2b-256 234f8a92c28f1c90d2d1127170a198ee5fa0205d6a0b12b90370fbdfef850ad6

See more details on using hashes here.

Supported by

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