php实现邀请码

网上查看了下别人怎么实现邀请码的,写个注释,方便理解。

不过,不知道会不会生成重复的code。好像是一般情况不会生成重复的code,高并发的情况可能会有重复的情况出现。如果怕生成重复的code,还是写入数据库或缓存保存起来,下次生成新的code再去比对一次,如果存在的话重新生成新的。

代码如下:

    function generate_invite_code() {
    	$code = ''; //保存生成的code码
        $char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; //26个字符
        $char2 = '0123456789ABCDEFGHIJKLMNOPQRSTUV'; //32个字符
        $data[0] = $char[mt_rand(0,25)]; //值为A~Z
        $data[1] = strtoupper(dechex(Date('m',time()))); //值为1~C
        $data[2] = Date('d',time()); //值为1~31
        $data[3] = substr(time(),-5); //时间戳后5位
        $data[4] = substr(microtime(),2,5); //值为微秒的小数点后5位
        $data[5] = sprintf('%02d',rand(0,99)); //值为0~99
       	$str = implode('', $data); //合并为字符串
       	$bin = md5( $str, true ); //16字节的二进制数据

        for($i=0;$i<8;$i++){
        	$a8 = ord($bin[$i]); //$a8保存前8字节的循环数据
        	$b8 = ord($bin[$i+8]); //$b8保存后8字节的循环数据
        	$index = ($a8 ^ $b8) - $a8 & 0x1F; //0x1F表示31,即$index的范围为0~31
        	$code .= $char2[$index]; //根据下标取出$char2中字符串
        }	

        return  $code;
    }

参考:

php生成8位随机不重复的邀请码

如何实现用户id生成一个唯一邀请码

PHP生成唯一的激活码

 

你可能感兴趣的:(php)