需求是每个用户都有个邀请码,邀请字母数字组成的10位字符串,首先想到的就是生成随机字符串了,如下

public function createNonceStr($length = 16)
{$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$str = '';for ($i = 0; $i < $length; $i++) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);}return $str;
}

但是这种方法理论上还是存在相同的可能性,尤其是用户数量足够大的情况。
这里我找到了一种比较简单但是能保证唯一性的算法,而且生成的字符串长度也很小(用户id为99999999时生成加密字符串为gVKJn),8位数的用户ID仅生成了5位数的加密字符串,如下

/*** 生成邀请码* @param $userId  用户ID*/private function getInviteCode($userId){$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$num = strlen($chars);$str = '';while ($userId > 0) {$mod = $userId % $num;$userId = ($userId - $mod) / $num;$str = $chars[$mod] . $str;}return $str;}

为了达到格式的统一性,也为了展示出不确定性,可以在将第二个方法和第一个方法结合。当第二张方法生成的加密字符串位数不足时,用第一个方法生成的随机字符串拼接在其前方,如下要求邀请码为10位时的情况

/*** 生成邀请码* @param $userId  用户ID*/private function getInviteCode($userId){$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$num = strlen($chars);$str = '';while ($userId > 0) {$mod = $userId % $num;$userId = ($userId - $mod) / $num;$str = $chars[$mod] . $str;}// 不足用随机字符串补充,10表示邀请码邀请10位$str = str_pad($str, 10, self::createNonceStr(10 - strlen($str)), STR_PAD_LEFT); return $str;}

参考文章

PHP生成唯一邀请码相关推荐

  1. 用户ID生成唯一邀请码的几种方法

    文章目录 1.需求描述 2.需求分析 3.字符集 4.方法一:随机数+唯一性判断(不可逆) 5.方法二:Hash+唯一性判断(不可逆) 6.方法三:进制法(可逆) 7.方法四:进制法+扩散.混淆(可逆 ...

  2. html 生成唯一码,生成唯一邀请码.html

    Document let sourceString = 'ZDOWGVJ5ASB3IRP9QM41EYFCU2TN76XH0KL';//三十五进制字符串长度不足8,用数字8高位补全 function ...

  3. 趣谈唯一邀请码生成方法

    趣谈唯一邀请码生成方法 前段时间项目上需要生成唯一邀请码!嘿嘿,多简单的一件事,心里就已默默将代码写了一遍.但小小的邀请码生成却也小有乾坤,这就是后话了. 一.最简单的实现 很多人 肯定都和我一开始一 ...

  4. java生成一条唯一的邀请码_根据用户id生成一个唯一邀请码

    需求描述:根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'. 这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到 ...

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

    一个10进制的数字短还是一个16进制的数字短? 肯定是16进制相对短一些,所以我们可以直接把用户id转成10+26=36进制的不就可以了吗?具体代码如下: function createCode($u ...

  6. php用户注册自动生成邀请码,PHP如何实现根据用户id生成一个唯一邀请码

    根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...

  7. java生成一条唯一的邀请码_如何实现用户id生成一个唯一邀请码

    根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...

  8. mysql 生成邀请码_如何实现用户id生成一个唯一邀请码

    根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...

  9. php生成游客id_PHP根据用户ID生成唯一的邀请码 | 剑花烟雨江南

    在开发中,我们可能会遇到需要生成用户唯一的邀请码,来做一些邀请活动,接下来,我们思考如何生成唯一的邀请码,且可以根据邀请码获取到用户id. 首先,我们可以考虑使用用户user_id 来生成邀请码,并生 ...

最新文章

  1. JZOJ 5390. 【NOIP2017提高A组模拟9.26】逗气
  2. 赞!超炫的页面切换动画效果【附源码下载】
  3. git分支(branch)操作相关命令
  4. 令人叫绝的EXCEL函数功能
  5. 获得进程id_浅谈python中的多线程和多进程(二)
  6. unity常见问题之20题
  7. 为什么越来越多的人尝试做自媒体
  8. oracle数据库字段的值加一_天天面试--数据库乐观锁和悲观锁
  9. Underscore骨骼
  10. wx.login 和 wx.getUserProfile 同时使用问题
  11. [转]阮杰:从散户到身价过亿的私募掌门人
  12. ERP100人物.第25期【风里来云里去兮,风行天下志更坚】 风云子
  13. php 足迹 表设计,成长的足迹设计方案
  14. bps是什么单位?是什么意思
  15. 有些MP4只有音频没有视频的解决办法
  16. 百度地图导航Android6.0初始化失败解决方法
  17. 算法练习-Apples Prologue
  18. java配置文件起名规范_Mybatis注解和配置文件命名规范所引发的问题
  19. Gartner年度趋势预测汇总整理(2006年-2023年)
  20. 统一身份认证子系统界面设计与实现

热门文章

  1. 用java实现计算器
  2. 展讯平台 mimi教程
  3. 让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析
  4. 北大施柏鑫:从审稿人视角,谈谈怎么写一篇CVPR论文
  5. UnsupportedOperationException异常解决
  6. 设备管理器如何改成锁定计算机,如何设置电脑不锁屏幕
  7. 四大ERP供应商SAP、Oracle、用友、金蝶哪个好
  8. 网易云易盾关于极验所述问题的致歉和说明
  9. java,制作简易画图板
  10. 为什么TCP存在重传