2011-11-08 13 views
8

私はクライアントがクライアントのために一意の識別子を持っています。クライアントのPHP固有の識別子

IDが生成されると、idは私のコードここでは、データベースに

が挿入されている:私は数として071120112032291320715949取得何らかの理由071120112032291320715949.928639888763427734375000

function makeUnique() { 
$start_time = uniqid(microtime(1)); 
$duration = sprintf('%0.24f', $start_time); 
return date('dmYHis').$duration; 
} 

echo makeUnique(); 

この出力。私は間違って何をしていますか?

答えて

6

"。"を削除する必要があります。 (ドット)をあなたの関数に追加します。おそらく、ドットの後の数字を削除するINTを使用しています。

return str_replace('.', '', date('dmYHis').$duration);

とフィールドが十分な大きさであることを確認してください - VARCHAR(50)

ように私の推薦は単にMD5

md5($clientid)

、あなたを使用してクライアントIDをハッシュすることになりますmysqlフィールドをchar(32)にする

+0

はmd5です。 –

+2

これを読んでください:http://developer.yahoo.com/security/ –

+0

ヒントありがとうございました –

4

あなたのコードにはすでに解決策があります。 PHP関数uniqid()は、...一意のIDを提供します。あなたが(それは必要はありませんが)それは本当に、本当に、本当に、本当にユニークだようにしたい場合は、ちょうどそうのように、最後まで時間を()追加:

return uniqid().time(); 

はこれも数字で混ぜた文字を返します(高いエントロピー)このレスポンスのように:

4eb8895a76edc1320716634 
+0

このようにすることもできます 'uniqid( ''、TRUE)'これは追加のエントロピーを追加します戻り値の最後に組み合わされた線形合同ジェネレータを使用します)、結果が一意になる可能性が高くなります。 – DarkSide

関連する問題