但し、下記の条件があります。
- 最低でも1億以上、採番可能なもの
- 時系列や連番など推測されやすいものはNG
- 基本的にデータベースを使用せずアルゴリズム内だけて採番(但しカウントアップ用で使うならOK)
- 数字が一意であると保証されていること
以上になります。
PHPのコードで書かれてると、なお有り難いです、
宜しくお願いします。
idの重複を確実になくすならこれしか方法はないと思います。
<?php $p=100; $temp=range(1,$p); shuffle($temp); print_r($temp); ?>
たとえば上の例だと$p=100なので、$tempは1~100までの数字を重複なしにランダムに格納した、100の要素の配列になります。
$pの数字は適当にかえてください。
http://codepad.org/KfMrQ2u2
↑こういう結果になります。
No.2の回答では連番生成されるので、簡単にIDが推測されてしまいます。
推測がしにくいユニークIDを発生させる方法としては、uniqid関数とmd5関数の組み合わせが考えられます。
以下のスクリプトは、ユニークIDを10進数10桁に変換し、配列$arrの添え字として1億個を発生させるものです。
$arr = array(); while (count($arr) <= 100000000) { $id = md5(uniqid(rand(),1)); $id = substr(hexdex($id), 0, 10); $arr[$id] = TRUE; }
上記の配列にセットするのは プログラムに固定で持たせれば よいでしょう。
2013/08/26 09:29:21