Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中从帖子ID生成引用号_Php - Fatal编程技术网

在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},而不是随机数,就像我在文章开始时使用的那样。有时候,即使知道了错误的答案也能帮助你学习,在我看来,我要测试一下,让你知道我发现了什么。谢谢