uuidはそれぞれ衝突しないIDを実装者が自由なタイミングで生成できる仕組みです。
iOSアプリを開発してる人なんかだと、ベータ版ユーザさんからかき集める例の16進数文字列というと分かり易いかも?
一応、理論上は衝突し得ますが
仮に毎秒数億個以上のスピードでUUIDを作ったとしても,人の一生どころか宇宙が誕生してから現在に至るまでの年月(約137億年)作り続けても重複などまずありえないほど
との事なので、まぁあまり気にしなくて良さそう。
バージョンは1,3,4,5とあり用途によって使い分けができます。
実際のところ
たとえば、SHA1を使ってUUIDを出すバージョン5だとこんな感じで動きます。
uuid.uuid5(uuid.NAMESPACE_DNS, 'shuzo_kino') #>> UUID('6ba7b810-9dad-11d1-80b4-00c04fd430c8') uuid.uuid5(uuid.NAMESPACE_DNS, 'shuzo_kino') #>> UUID('c20f30ce-c4b5-5370-99f8-ea30a4d85eb8')
version4は乱数から生成するもので、デバイス固有情報は漂白されています。
base64と合わせる事でセッション記号として使ったりするみたいですね。
print(base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes)) #>> b'4ygcWrMbQZGjUu5+hvNPmB7azE3B2klprzmFxqFdA5c=' print(base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes)) #>> b'Akg9f5iKTP6iDFBvb1PX8i6f43XO1kCoiHDQXd5oxFU='
ちょっと面白い使い方として……端末のMACアドレスを調べる……なんて使い方も。
これはバージョン1の生成データがmacアドレスである事から来ています。
import re, uuid print(':'.join(re.findall('..', '%012x' % uuid.getnode()))) #>> 6c:XX:YY:ZZ:81:12
参考もと
- 21.20. uuid — UUID objects according to RFC 4122 — Python 3.5.5 documentation
- UUID | 日経 xTECH(クロステック)
- UUIDはなぜ、分散環境で好き勝手に生成しても衝突しないのか。RFC4122規格とUUIDの性質。 | 三度の飯とエレクトロン
- MD5とは - IT用語辞典
- UUIDとは - IT用語辞典
- SHA-1とは - IT用語辞典
- sonar/get_mac.py at 39bb6c3ab489b27d879f8737f4b9b5e0b80c39d2 · ellipsys/sonar · GitHub