从 PHP 中的帖子 ID 生成参考编号


Generate a Reference number from a Post ID in PHP

我想生成一个参考编号,当用户想要将其发送给代理或返回到站点时,可以使用该参考编号进行搜索或保存。

我拥有的是这个 ->我想要的:

 '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_array

您可以使用我创建的这个类/CI_Library。

<?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。