Generates a 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 subtract itself from the operation, the final range is between 0-31, how is this determined?
Reply content:
Generates a 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 subtract itself from the operation, the final range is between 0-31, how is this determined?
( $g ^ ord( $a[ $f + 8 ] ) ) - $g & 0x1F
In short there is a key point in which operators have -
&
higher precedence.
So the overall view should be ( ( $g ^ ord( $a[ $f + 8 ] ) ) - $g )
and 0x1F
proceed with the operation,
And that 0x1F
is the decimal 31
, and the result range is limited to 0 - 31
between.