在PHP中从帖子ID生成引用号
我想生成一个参考号,当用户希望将其发送到代理或返回站点时,可以使用该参考号进行搜索或保存 我所拥有的是->我想要的:在PHP中从帖子ID生成引用号,php,Php,我想生成一个参考号,当用户希望将其发送到代理或返回站点时,可以使用该参考号进行搜索或保存 我所拥有的是->我想要的: '45' -> REF4903295762 '421' -> REF3425436346 '1250' -> REF4695039476 添加“REF”字符串不是问题,但从ID生成偶数长度的数字和/或字母并使其可解码是重要的一点 注意:与URL缩短器的功能一致。嗯。。。通常,REF后面的数字是ID。但是,如果您希望它是随机的,您可
'45' -> REF4903295762
'421' -> REF3425436346
'1250' -> REF4695039476
添加“REF”字符串不是问题,但从ID生成偶数长度的数字和/或字母并使其可解码是重要的一点
注意:与URL缩短器的功能一致。嗯。。。通常,REF后面的数字是ID。但是,如果您希望它是随机的,您可以创建另一个名为“REF”的列。你创建了一个随机数
$string = rand(0, 9999999);
然后使用MySQL检查它是否未被使用
$used = true;
while($used)
{
$string = rand(0, 9999999);
$query = mysql_query("SELECT * FROM `table` WHERE `REF`='$string'");
if(!mysql_num_rows($query))
{
$used = false;
}
}
然后你把它插进去。然后你就可以在以后的专栏中查找。检查您是否使用mysql_num_rows,但我不确定您是否需要在它之前使用msyql_fetch_数组您可以使用我创建的这个类/CI_库
<?php
class Xref{
private $key = 24040410;//secret key - change to your own key (int only)[length = 8]
private $limit = 67000000;//num limit [do not change]
function encrypt($num){
if($num > $this->limit){
return false;
}else{
$binaryString = $this->toBinaryString($num);
$reversedBinaryString = $this->reverseString($binaryString);
$reversedBinaryInt = bindec($reversedBinaryString);
$xor = $this->key ^ $reversedBinaryInt;
return str_pad($xor, 8, '0', STR_PAD_LEFT);
}
}
function decrypt($str){
$xor = $this->key ^ intval($str);
return bindec($this->reverseString($this->toBinaryString($xor)));
}
private function toBinaryString($num){
return str_pad(decbin($num), 26, '0', STR_PAD_LEFT);
}
private function reverseString($str){
return strrev($str);
}
}
?>
只需使用
encrypt($ID)
将其转换为“类似随机”的数字,然后使用decrypt($str)
将ID取回。发送给p.S.:我假设短程序只需在其数据库中存储一个键值元组,键值作为短字符串,值作为长字符串。。。但这对你们并没有帮助。为什么不在数据库中存储参考号呢?您可以根据当前时间戳生成它。只使用0
s填充有什么问题?我真的不想在数据库中存储任何额外内容,如果您搜索“REF###########”并从时间戳中解码字符串,希望PHP对其进行动态解码,我会把我不想搜索的时间戳还给我REF45
是一个简单的答案,但给出了帖子ID,加上系统可能包含来自其他站点(即财产站点)的Ref,那么当我有999998条记录时呢?这段代码在找到最后一个备用ID之前会循环很长时间。这就是为什么连续ID是一个好主意。是的,我知道,这就是为什么我通常使用REF{ID},而不是随机数,就像我在文章开始时使用的那样。有时候,即使知道了错误的答案也能帮助你学习,在我看来,我要测试一下,让你知道我发现了什么。谢谢