PHPは、重複しない8ビットカード番号(数字)とカード密(文字列)をランダムに生成する

1444 ワード

一、重複しない乱数を生成し、長さをカスタマイズする
/**
 *           
 * @param  int $start             
 * @param  int $end        
 * @param  int $length           
 * @return number            
 */
function getRandNumber($start=0,$end=9,$length=8){
	//      0
	$connt = 0;
	//      
	$temp = array();
	while($connt < $length){
	//                  
	$temp[] = mt_rand($start, $end);
	//$data = array_unique($temp);
	//           “   ”,   array_flip()    key value    。       array_unique()    。	
	$data = array_flip(array_flip($temp));
	//          count 	
	$connt = count($data);
	}
	//         
	shuffle($data);
	//      
	$str=implode(",", $data);
	//     
	$number=str_replace(',', '', $str);
	return $number;
}

二、ランダムに重複しない8ビットカードを生成する
function makeCardPassword() {
        $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $rand = $code[rand(0,25)]
            .strtoupper(dechex(date('m')))
            .date('d').substr(time(),-5)
            .substr(microtime(),2,5)
            .sprintf('%02d',rand(0,99));
        for(
            $a = md5( $rand, true ),
            $s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
            $d = '',
            $f = 0;
            $f < 8;
            $g = ord( $a[ $f ] ),
            $d .= $s[ ( $g ^ ord( $a[ $f + 8 ] ) ) - $g & 0x1F ],
            $f++
        );
        return  $d;
}