很多app会有一个,邀请新用户,自己获得奖励的机制。
通过userid 生成每个用户的唯一邀请码,通过这个邀请码进来的用户,就可以带给自己奖励
其原理就是十进制转换 更大进制
一. 最原始的邀请码
可以用自己的 userid
缺点是暴露了自己的userid,以及很多userid是十进制,有可能太长
二. 最方便的邀请码生成方式
把十进制转换成 十六进制(或其他进制函数base_convert)
base_convert(string $number, int $frombase , int $tobase)
$number 原始数据
$frombase 原始数据的 进制格式 (2 和 36 之间)
$tobase to进制格式 (2 和 36 之间)
//0-9 a-z(代表10-35)
base_convert(102023, 10 , 10);// 102023 (10进制)
base_convert(102023, 10 , 16);// 18e87 (16进制)
base_convert(102023, 10 , 36);// 26pz (36进制)
三.base_convert原理
//简单实现一个 10 转 16进制的函数
function my_base_convert($int,$from = 10,$to = 16){
$bases = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];//代表0-15
$toValue = '';
$shang = $int;
do{
$yu = $shang % 16 ;
$shang = floor($shang / 16) ;
$toValue = $bases[$yu].$toValue;
}while($shang > 0);
return $toValue;
}
base_convert(102023, 10 , 16);// 18e87 (16进制)
my_base_convert(102023,10,16);// 18e87 (16进制)
四.有没有代替的方式?
base_convert的进制方式,是有顺序的,容易被人反向解析到 userid
有没有我们自己实现一个类似的base_convert,,不过是无序的?
function my_base_convert($int,$from = 10,$to = 16){
$bases = ['a','b','0','1','2','3','4','7','8','9','c','d','e','f','5','6'];//代表0-15
$toValue = '';
$shang = $int;
do{
$yu = $shang % 16 ;
$shang = floor($shang / 16) ;
$toValue = $bases[$yu].$toValue;
}while($shang > 0);
return $toValue;
}
my_base_convert(102023,10,16);// b8587 (无序16进制)
五.更大的无序进制转换
只需要把 $bases 放大就行
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。