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

时间:2012-08-08 11:22:50

标签: php

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

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

 '45'     ->  REF4903295762
 '421'    ->  REF3425436346
 '1250'   ->  REF4695039476

添加'REF'字符串不是问题,但是从ID生成偶数长度数字和/或字母并使其可解码是重要的一点。

P.S。符合URL缩短程序的内容。

2 个答案:

答案 0 :(得分:0)

嗯......通常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

答案 1 :(得分:0)

您可以使用我创建的这个类/ 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。