Auto Incr を使用して、MySQL テーブル フィールド (question_id) の整数を使用した短い一意の文字列 ID を導入したいと考えています。
例ユーザーが www.something.com/SjBWY を指す場合 -> php は id=23511 のレコードをフェッチします。
質問の数に関する情報を非表示にして、ある種の変換アルゴリズムを使用して question_id に 1 対 1 でマップされる question_code を導入したいと考えています。データベースに question_code を保存したくありません。MySQL 開発者は私より賢く、一意の番号を生成するための信頼できるメカニズムを作成したと思います。
単純なアプローチ: ( http://ideone.com/rK4hzx )
$num = 11231;
while($num > 0) {
$v = ord( $num % 10);
$v += 25;
echo chr($v);
$num = round($num / 10);
}
// JLKJJ
$result = array_reverse(str_split('JLKJJ'));
foreach ($result as $single) {
echo chr(ord( $single)-25);
}
// 11231
質問:より良い解決策を提案していただけますか?
単純なアプローチの弱点:
- 小文字も大文字も使えるようにしたい
- 文字列の長さをできるだけ 5 に制限できるようにしたい。
- 生成された文字列では、シーケンスが明らかであってはなりません。11 の値は、12 から可能な限り離れている必要があります。
EDIT アルゴリズムは対称である必要があります。これは、Int->String および String->Int を変換できることを意味します。MD5 およびその他のハッシュ アルゴリズムは一方向のみです。String->Int から変換することはできません。