Advertisement

PHP生成用户邀请码

阅读量:

引言

在许多APP中,为了推广经营用户常常会有分享功能,APP内的用户拥全局唯一的邀请码,将邀请码分享给自己的好友,好友按照分享的引导步骤填写邀请码,邀请人就可以获得一定的奖励,那么我们在开发过程中要如何生成一个全局唯一的邀请码呢,下面笔者提一下自己的思路,如果有更好的解决方案,欢迎各位小伙伴一起交流。

邀请码的组成

现在大多数的邀请码由数字和字母组成,长度由业务需求而定,在此,笔者想要的邀请码的形式为数字+大写字母组成。

以手机的唯一性为用户生成全局唯一的邀请码(除了手机号还可以用用户ID,只要保证该数在数据库唯一即可)

数字:1、2、3、4、5、6、7、8、9、0

字母: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

所以:10个数字 + 26个字母 = 36个字符,将36个字符组成一个一维数组

比如:

复制代码
 $codeArr = [

    
   '0','1','2','3','4','5',
    
   '6','7','8','9','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'
    
 ];

或者:

复制代码
 $codeArr = [

    
   'L','1','2','C','4','U',
    
   '6','7','8','9','Y','Z',
    
   'A','B','3','D','E','F',
    
   'G','H','I','0','J','K',
    
   'M','N','O','P','Q','R',
    
   'S','T','5','V','W','X',
    
 ];

一维数组中字符的顺序自己选择即可

生成邀请码

思路:循环对10进制的手机号进行对36取余和取正,余数作为数组下标从一维数组中取值,直到对36取整后的值为0

复制代码
 function inviteCode($phone)

    
 {
    
     static  $codeArr = [
    
 			  'L','1','2','C','4','U',
    
 			  '6','7','8','9','Y','Z',
    
 			  'A','B','3','D','E','F',
    
 			  'G','H','I','0','J','K',
    
 			  'M','N','O','P','Q','R',
    
 			  'S','T','5','V','W','X',
    
 	               ];
    
     $code = '';
    
    
    
     while($phone)
    
     {
    
     $mod = $phone % 36;
    
     $phone = (int)($phone / 36);
    
     $code = $codeArr[$mod].$code;
    
     }
    
  
    
     return $code;
    
 }

如果是根据用户ID的形式来生成邀请码,且要求长度不小7的话,则可以在生成邀请码后判断邀请码长度,如果长度小于

要求的长度的话,则可以选择在邀请码的左边或右边用指定字符来补齐,如:

复制代码
 function inviteCode($id)

    
 {
    
     static  $codeArr = [
    
 			  'L','1','2','C','4','U',
    
 			  '6','7','8','9','Y','Z',
    
 			  'A','B','3','D','E','F',
    
 			  'G','H','I','0','J','K',
    
 			  'M','N','O','P','Q','R',
    
 			  'S','T','5','V','W','X',
    
 			];
    
     $code = '';
    
    
    
     while( $id)
    
     {
    
     $mod =  $id % 36;
    
     $id= (int)( $id / 36);
    
     $code = $codeArr[$mod].$code;
    
     }
    
  
    
     //判断code的长度
    
     if( strlen($code)<7){
    
       
    
       $code = str_pad($code,7,'0',STR_PAD_LEFT);
    
     
    
     }
    
  
    
     return $code;
    
 }

str_pad使用说明:https://www.php.net/manual/zh/function.str-pad.php

全部评论 (0)

还没有任何评论哟~