引言
在许多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
来源:CSDN
作者:浪子四方
链接:https://blog.csdn.net/lwqBrell/article/details/103976392