Generate an 8-bit random string {code...} For ($ g ^ ord ($ a [$ f + 8]) to generate an 8-bit random string
function make_coupon_card() { $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; }
For ($ g ^ ord ($ a [$ f + 8])-$ g & 0x1F bitwise XOR or subtraction itself and operations, the final range is between 0 and 31. How is this determined?
Reply content:
Generate an 8-bit random string
function make_coupon_card() { $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; }
For ($ g ^ ord ($ a [$ f + 8])-$ g & 0x1F bitwise XOR or subtraction itself and operations, the final range is between 0 and 31. How is this determined?
( $g ^ ord( $a[ $f + 8 ] ) ) - $g & 0x1F
In short, there is a key point: Operators-
The priority&
High.
So it should be( ( $g ^ ord( $a[ $f + 8 ] ) ) - $g )
And0x1F
Operations,
While0x1F
It is in decimal format.31
The range of the result to be obtained is limited0 - 31
.