ユニークな ID の生成方法についてちと調べてみると、
どうやら業界では
UUID
http://hegel.ittc.ku.edu/topics/internet/internet-drafts/draft-l/draft-leach-uuids-guids-01.txt
って奴が標準のようだ。
UUID は 128bit で、人間が見やすい形式に 8-4-4-4-12 の 16 進数
表記したものは GUID というらしい。
UUID には 4 つの形式があるらしいけど、
time-based と random がよく使われてる模様。
Linux の場合
# uuidgen
http://www.linux.or.jp/JM/html/e2fsprogs/man1/uuidgen.1.html
を使う
# /proc/sys/kernel/random/uuid を使う
Java の場合
# クラス UUID
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/UUID.html
をつかう
Perl の場合
こんな感じかのぉ。
#!/usr/bin/perl
# Leach-Salz 形式の UUID をランダムに生成
sub getUUID {
my(buf);
open(FL,'/dev/urandom');
read(FL,$buf,16);
close(FL);
my(@bar(=unpack('C*',$buf);
$bar[6] = ($bar[6] & 0x0f) | 0x40;
$bar[8] = ($bar[8] & 0x3f) | 0x80;
return pack('C16',@bar);
}
sub getGUID {
my(@bar)=unpack('C*',&getUUID());
return sprintf('%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x',@bar);
}
print &getGUID()."\n";