[JavaScript] UUID.jsを作成しました
- 2008-10-04
- カテゴリ: Client Side
- タグ: JavaScript UUID アルゴリズム
[追記] UUID.jsの最新版はGitHubで公開されています! (解説記事)
UUID (Universally Unique Identifier) を生成する JavaScript ライブラリを作ってみたので公開します。
UUID は、128 ビットの長さを持つ識別子です。普段使うときは↓のように 16 進法で表現されて、ところどころにハイフンが入ります。
e8783d5e-90dd-4af9-8aa6-371d43fcbcb4
UUIDは 128 ビットで 2128 = 3.4e+38
通りもあるので、偶然同じ ID が生成されることが (ほぼ) ないんです。だから、ID の一意性を維持するためにわざわざ統制する必要がなくて、面倒くさがりな人間にとっては便利すぎる ID なんですね!
で、そんな便利な UUID を JavaScript で使うためのライブラリを探してみたのだけれど、あまり良いものが見つからず。英語版 Wikipedia に書いてある JavaScript UUID Class というのも試してみたけれど、RFC 4122 に書いてある UUID の仕様とはちょっと違う感じの不思議な ID を生成するのでいまいち。ということで、自分で RFC を読みながら実装してみました。
使い方等は続きで。
使い方
使い方は簡単。
- 1. UUID.js をロードする
<script type="text/javascript" src="uuid.js"></script>
- 2. 生成する
var uuid = UUID.generate(); // "8368a644-87b7-429a-8cbb-ee0b29f9d4b2"
たったこれだけで使えるし、ライセンスも MIT ライセンスにしておいたから、ぜひ使ってね!
サンドボックス
8d5b2507-b6fc-4cf0-b962-fbf61165efad
アルゴリズムについて
RFC 4122 に規定されている UUID は Version 1 から Version 5 まであって、今回実装したのは一番簡単な Version 4。RFC に書かれている Version 4 のアルゴリズムは↓たったこれだけ。
RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace
4.4. Algorithms for Creating a UUID from Truly Random or Pseudo-Random Numbers
The version 4 UUID is meant for generating UUIDs from truly-random or pseudo-random numbers.
The algorithm is as follows:
- Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively.
- Set the four most significant bits (bits 12 through 15) of the time_hi_and_version field to the 4-bit version number from Section 4.1.3.
- Set all the other bits to randomly (or pseudo-randomly) chosen values.
See Section 4.5 for a discussion on random numbers.
Version 4 以外の UUID では、MAC アドレスを使ったり、POSIX 準拠のユーザー ID を使ったり、MD5 を使ったり、 SHA-1 を使ったりということで、JavaScript で直接実装するのはちょっと面倒な感じ。Version 1 はちょっとがんばれば実装できそうだから、今度元気があったときに実装するかも。
@todo
できれば実装したいものリスト
- ランダム性の改善 (
Math.random
で素直に生成しているだけなので、もう少し改善したい) - Version 1 に対応 (MAC アドレスの代わりに乱数を使った Version 1 が RFC に書かれているので、それを実装したい)
- CodeRepos に放置したい (CodeRepos のアカウントってどうやって作るんだろう)
関連記事
トラックバック URL
- http://liosk.blog103.fc2.com/tb.php/154-381ae767
トラックバック
- [UUID.js] バグがあったので修正しました><
-
前回のエントリーで公開したばかりの UUID.js ですが、いきなりバグが出てしまったので修正版を公開しました><
UUID.js (修正済み)
バグの内容は...
- 2008-10-04
- 発信元: 文系大学的IT系の悲哀
- UUID.js が UUID version 1 に対応しました
-
今までは UUID version 4 にしか対応していなかった UUID.js を、UUID version 1 にも対応させてみました。
UUID.js
使い方
使い方はやっぱり簡単。
1. UUI...
- 2008-10-04
- 発信元: 文系大学的IT系の悲哀
- UUID.js を CodeRepos に放流しました
-
表題の通り、UUID.js を CodeRepos に放流しました!
root/lang/javascript/UUID.js - CodeRepos
まだまだ育て甲斐のある状態なので、どんどんいじっちゃってく...
- 2008-10-08
- 発信元: 文系大学的IT系の悲哀
- [JavaScript] UUID.js を更新しました!
-
以前公開したまま放置していたJavaScript用のUUID生成ライブラリ、UUID.jsの最新バージョンを公開しました!
大幅な機能追加とバグ修正が行われて、...
- 2010-07-27
- 発信元: LiosK-free Blog
コメント
-
http://coderepos.org/share
> commit権いる方はyappo <at> shibuya <döt> plまでhtpasswdを送ってください。自分のブログの URL や、coderepos で何を開発したいかなどを書いておくとベターでございます。
って事なのでメールにhtpasswdつけて送るだけです。
UUIDはちょうど使いたいなと思っていた所なので非常にタイムリーです。- 2008-10-05
- by zigorou
- id:v0W2OX1k
- 編集
-
ありがとうございます。メールを送ってみました!
- 2008-10-06
- by LiosK
- id:-