固有のコード ランダム コード
より具体的な要件は次のとおりです
データベースに徐々に挿入できるレコードは 100,000 個までです。各レコードのこのフィールドの値は 8 桁のコードです
。
1. DLKPOWND、OUICHGEB などのランダムなコードのように見えます。 2. たとえば、id=1 は AAAAAAAA に対応し、id=2 は AAAAAAAB に対応します。とにかく、相手が何もしないようにするためです。コードを推測して検索すると、結果が簡単に見つかります (100,000 のエントリは 2,088 億の可能性に相当します。推測だけに頼る場合は、基本的にヒットすることはできません)
3. このレコードを入力ライブラリに挿入する前にそのようなコードを取得することを希望します。データベースが既に存在するかどうかを検索する必要はありません。おそらく、これを十分に明確に説明していませんでした。実際には、substr(rand(0,25),1,$str) を使用して 8 回ループしてコードを生成し、データベースに移動して検索します。ただし、これは、データベースを検索して一意であるかどうかを判断するのではなく、タイムスタンプを渡すことによって一意のものを生成する最後のオプションです。例として、タイムスタンプをシードとして使用する必要はありません
おおよその説明はこれだけです。明確に説明されていない場合は、それを提示していただければ追加します。アドバイスや方法を教えてください~~ありがとう。
ディスカッションに返信(解決済みプラン)
最大100,000?
つまり、自己増加するIDは1から99999です
00001から99999の5桁に合わせて先頭の0を埋めます
000011から999999に(もちろん指定します)一の桁を追加します
そしてBase64エンコーディング
echo base64_encode('000011'), PHP_EOL;echo base64_encode('999999'), PHP_EOL;/*MDAwMDExOTk5OTk5*/
ログイン後にコピー
を実行します 必要に応じて、結果に対して「シーザー暗号化」(辞書シフト)を実行します
自己増加するIDは一意であるため、取得される文字列も一意です
アルゴリズムは非常にシンプルである必要があります
使い方は非常に簡単ですシードとして自己増加する ID は 100,000 の範囲内で一意であり、8 桁をインターセプトした後の現在のタイムスタンプはそうではないため、良い選択です
しかし、最初に保存し、ID 番号を取得してから更新する必要がありますか?データベースに書き込む前にデータベースを確認するか、コードを取得するか、挿入時に要件を満たすコードを挿入できますか?
変形した自己増加 ID なので、保存する必要はありませんデータベースですよね?
逆の操作をすれば元に戻りませんか?
自己増加 ID をシードとして使用するのは良い選択です。これは 100,000 の範囲内で一意であり、8 桁をインターセプトした後の現在のタイムスタンプはそうではないからです
しかし、ID を取得するには最初にそれをデポジットする必要がありますか?データベースに書き込む前にデータベースを確認したり、コードを取得したりできますか? 挿入時に現在の時刻を 16 進数 (8 桁) に変換できますか?一意性を確保するために暗号化します。データベースをチェックする必要はありません。
時間を使うのも一つの方法ですが、時間だけでは十分ではありません。
2 つのリクエストが同時に応答されないことを誰が保証できますか?
これはおそらく機能します
echobase_convert(str_replace('.', '', $_SERVER['REQUEST_TIME_FLOAT']), 10, 36); ただし、ミリ秒単位の精度なので、高性能サーバーでは依然として問題になる可能性があります。
define('ONLY','FDSAR2432FDS');
echobase64_encode(ONLY.'000011'), PHP_EOL;
echobase64_encode(ONLY.'999999'),