PHPがランダムコードを生成する構想と方法の実例の探求

3904 ワード

PHPがランダムコードを生成する考え方と方法を例に挙げた.皆さんの参考にしてください.具体的には以下の通りです.
背景
今日は退屈なので、友达は5ビットのランダムコードを生成する関数を書かせて、要求:数字、アルファベットの大文字と小文字を含んで、コードはできるだけ短いです.
問題を解く構想.
(1) . 第一の考え方
いずれも、イメージにマッチしたASCIIコードをランダムに読み取る方法であり、ここでは参考にする方法を提供することができる.

function get_rand_ascii($pw_length = 5){
  $randpwd = '';
  for ($i = 0; $i < $pw_length; $i++) {
    $randpwd .= chr(mt_rand(33, 99));
  }
  return $randpwd;
}


(2) . 第二の考え方
1.使用可能なすべての文字を含むランダム配列の定義

function getRandomString($length=5) {
  //          
  $chars = array(
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
    "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
    "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
    "3", "4", "5", "6", "7", "8", "9"
  );
  $charsLen = count ( $chars ) - 1;
  shuffle ( $chars ); //      
  $output = "";
  for($i = 0; $i < $length; $i ++) {
    $output .= $chars [mt_rand ( 0, $charsLen )];
  }
  return $output;
}


ヒント:このようなコードは、1、I、l、0、o、O、9、qなどの曖昧な文字を除去することを提案する.
短所:5文字が重複していない
2.上記1の配列形式を比較し、設計文字列形式は以下のように参照する.

function get_pass( $length = 8 ) {
  //      ,           
  $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';
  $password = '';
  for ( $i = 0; $i < $length; $i++ ) {
    //             
    //        substr   $chars        ;
    //           $chars      
    // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
  }
  return $password;
}


(3) . 第三の考え方
発見された新しい考え方は、暗号化アルゴリズムを使用して取得できます.

public function getRand(){
  $rand = rand(10000,100000);
  $str = substr(base64_encode($rand), 0, 5);
  return $str;
}


ヒント:md5()関数は数字と小文字のアルファベットのみ
発見:base64_encode()は要求を満たすことができる
エクステンション
PHPの設計に対して、一般的なランダムコードは検証コード、共有コードの生成に用いることができ、ビット数の制限に重点を置き、必要に応じて、このランダムコードの一意性を保証する.password_hashの使用(PHP>5.5)
ユーザーのパスワード暗号化ストレージに使用できますが、データベースが移行する場合はjavaまたは.Net言語は適用しにくい.

$password = 'password1232456';//          
//         BCRYPT       
//      ,               
//$db_pass = '$2y$10$2vJJC.rb/swAUnTfc9B94.l/ix75kiZHvOZFpu0Dd8uzp07YWlj4q';
$db_pass = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password , $db_pass)){
  echo "    ";
}else{
  echo "    ";
}


参考記事:
https://www.jb51.net/article/71635.htm
PS:ここでは、2つの機能に似たオンラインツールを提供します.参考にしてください.
オンライン乱数/文字列生成ツール:http://tools.jb51.net/aideddesign/suijishu
オンラインランダム文字/ランダムパスワード生成ツール:http://tools.jb51.net/aideddesign/rnd_password
PHPの関連内容についてもっと興味のある読者は、「PHP数学演算技術総括」、「php文字列(string)用法総括」、「PHPデータ構造とアルゴリズム教程」、「phpプログラム設計アルゴリズム総括」、「PHP配列(Array)操作技術大全」及び「phpよく見られるデータベース操作技術総括」を参照してください.
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.