PHPで指定されたデータから固定長の一意の数値を生成する方法は? たとえば、数字と文字を含む文字列を持つことができ、長さ 6 の一意の数値を生成する必要があります。ありがとう!
2 に答える
どのアルゴリズムでも、入力から一意の数値を生成することはできません。これは、入力を疑似乱数出力に変換する問題です。入力文字列が 20 文字で、出力文字列が 6 文字しかない場合、結果が繰り返されます。理由は次のとおりです。
20 文字の入力 (58 の英数字の可能性を想定):
58^20 = 1.8559226468222606056912232424512e+35 possibilities
6 文字の出力 (10 個の数値の可能性を想定):
10^6 = 1000000 possibilities
つまり、文字列から一意の番号を生成することはできません。md5やsha1などのハッシュ関数を使用することをお勧めします。英数字ですが、いつでも数字に変換できます。ただし、たとえば 6 桁にトリミングすると、繰り返される可能性が大幅に高まります。
残念ながら、文字数に制限がある任意の値を指定して、完全に一意の値を生成することはできません。長さ 6 の数値には 999999 個の値しかありませんが、可能な値は無限にあります。
ただし、PHPでは次のことができます。
$list_of_numeric_values = array();
foreach ($list_of_given_values as $value)
{
if (!in_array($value, $list_of_numeric_values))
$list_of_numeric_values[] = $value;
}
これが完了すると、配列は、使用可能な値ごとに一意のキーを持ちます。
これらすべてを同時に計算する必要がない場合は、PHP を使用して配列を「検索」する代わりに、おそらく MySQL テーブルで SELECT を実行して、エントリが現在存在するかどうかを確認し、自動インクリメントを使用する同様のアルゴリズムに従うことができます。あなたの値を取得するための主キーの。