dポイントプレゼントキャンペーン実施中!

以下のようにして文字数の短いユニークなID生成をしようとしていますが、Digest::SHA1を使って生成したものをsubstrで先頭から任意の文字数でカットしてしまったものは「ユニークなID」という資質を保っているのでしょうか?
メール本文にURLを記載することを前提としているので、Digest::SHA1で生成した段階のものでは文字数が長過ぎてURLとして認識されないため、このように生成されたものをカットしています。


use Digest::SHA1 qw(sha1_hex);

$yourid = substr(&genUniqID,0,15);

sub genUniqID{
my $word = shift || 'anyone';
my $id = join(''
, $ENV{'HTTP_USER_AGENT'}
, time
, rand(9999)
, $word
);

return(sha1_hex($id));
}

A 回答 (1件)

元々、SHA1やMD5のようなハッシュには、


衝突(違うデータに対して同じハッシュができること)する可能性は、
天文学的な数字ではあっても、あります。
従って、元々ユニークではないです。

それを短くすれば、
衝突の確率が上がるだけ、です。

本格的に絶対ユニークを保ちたいのならば、
データベースなどでIDを管理するしかないですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2007/06/25 13:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!