Web 開発では、注文番号や確認コードなど、繰り返しのないランダムな文字を生成する必要があることがよくあります。 PHP は広く使用されている開発言語であり、PHP を使用してこの機能を簡単に実装できます。この記事では、PHP で 18 ビット非反復文字を生成する方法と、対応するアルゴリズムとテクニックを紹介します。
1. 乱数を使用して非反復文字を生成する
PHP では、rand() 関数または mt_rand() 関数を使用して乱数を生成できます。ただし、この方法で生成される乱数は繰り返される可能性が高いため、生成された文字が繰り返されないようにするには、いくつかのスキルが必要です。
以下は簡単な方法です:
1. 生成された文字を保存する空の文字列 $chars を定義します;
2. 毎回ランダムな文字を生成します その後、 strpos() 関数を使用して、文字が $chars に既に存在するかどうかを確認します。既に存在する場合は、ランダムな文字を再生成します。
3. 生成されたランダムな文字が存在しない場合は、それを $chars に追加します弦。
以下はサンプル コードです:
function generateRandomString($length) { $chars = ""; while (strlen($chars) < $length) { $char = chr(mt_rand(65, 90)); // 生成65-90的随机数字 if (strpos($chars, $char) === false) { // 判断$char是否已经在$chars中出现过 $chars .= $char; } } return $chars; } echo generateRandomString(18);
上記のコードでは、mt_rand() 関数を使用して 65 から 90 までの乱数を生成し、その後 chr() 関数を使用します。この数値を対応する文字に変換します。生成されたランダムな文字列は繰り返される可能性があるため、strpos()関数を使用して文字がすでに存在するかどうかを確認し、生成される文字の総数が設定された長さに達するまで、ランダムな文字の生成とwhileループによる検索のプロセスを繰り返します。結果を返します。
2. タイムスタンプと乱数を使用して一意の文字を生成する
上記の方法で一意の文字を生成する機能はすでに完了していますが、生成された文字を繰り返し検索する必要があるため、が必要です。計算能力は比較的高い可能性があります。同時アクセスが多く、生成される文字数が多い状況では、パフォーマンスの問題が発生しやすくなります。
したがって、タイムスタンプ乱数方式を使用して一意の文字を生成できます。
次のアイデアです:
1. 一意のタイムスタンプを生成し、それを 16 進文字列に変換します;
2. 4 桁のランダム文字列を生成し、それを追加しますをタイムスタンプ文字列の前に追加して 20 桁の長さにします;
3. substr() 関数を使用して、タイムスタンプ文字列の最後の 16 桁を生成されたランダム文字としてインターセプトします。
以下はサンプル コードです:
function generateNonceStr($length = 18) { $timestamp = uniqid('', false); $nonce_str = substr($timestamp, 4) . substr(mt_rand(1000, 9999), 0, 4); return substr($nonce_str, -$length); } echo generateNonceStr();
上記のコードでは、まず 16 ビットのタイムスタンプ文字列を生成し、それを 36 桁の文字列に変換してから、タイムスタンプ文字列を生成します。指定された長さのランダムな文字列を使用します。最後に、2 つの文字列が連結され、substr() 関数を使用して、指定された長さの後続の部分文字列 (生成される非繰り返し文字) が取得されます。
3. 概要
この記事では、一意の文字を生成する 2 つの方法を紹介しますが、その中でタイムスタンプと乱数生成を使用する方法がより実用的で効率的です。支払い関連のシナリオで注文番号を生成するようなシナリオでは、より完全なアルゴリズムとルールを使用して、生成された注文番号が重複していないことを保証するだけでなく、特定の文字や数字の出現を避けて、不正行為のリスクを軽減する必要があります。攻撃されている。
以上がPHPで18ビットの非反復文字を生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。