PHP生成用户邀请码

▼魔方 西西 提交于 2020-01-28 04:12:33

引言

在许多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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!