生成6位邀请码,无规律、唯一、不重复
短信预约 -IT技能 免费直播动态提醒
常见不查数据库的邀请码方案,大部分是利用进制转换或自定义补位加密的方式实现,无法避免生成的邀请码依然比较规律。
函数思路
-
利用数字翻转后也是唯一的特点,就可以实现数字较大幅度无规律变化之后再做进制转换,只要翻转过程始终处在6位进制的区间就可以实现唯一。
-
转2进制翻转是为了扩大范围容量,其实用10进制翻转后有90亿的容量也是足够用的。
function inviteCode6($id){ //10进制转2进制翻转,补位避免数字翻转塌陷。 $id = base_convert('1' . substr(strrev((base_convert($id + 3221225472, 10, 2))), 0, -1), 2, 10); //字典字母顺序可打乱 $dict = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; $base = strlen($dict); $code = ''; //自定义进制转换 do { $code = $dict[bcmod($id, $base)] . $code; $id = bcdiv($id, $base); } while ($id > 0); return $code;}
进一步优化思路
-
函数可进一步封装自定义字典,自定义输出位数【有时间我会封装一下也发出来】。
-
同样的原理通过打乱字典、更换翻转进制、调整起点基数,即可改造成简单对称加密函数。
-
如果不需要解密获取传入的id,可随机固定前几位再连接id的方式传入实现完全不可逆且唯一。
来源地址:https://blog.csdn.net/u014782135/article/details/126583949
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341