2012-08-08 26 views
0

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

什么我是这样的 - >我想:

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

添加“REF”字符串不是一个问题,但是从ID产生偶数长度的数字和/或字母,并具有其解码回是重要的一点。

P.S.一些符合URL缩写者的内容。

+0

REF45有什么问题? – zerkms 2012-08-08 11:25:33

+0

对于P.S .:我假设shorteners只是在他们的数据库中存储一个键值元组,键与短键和值作为长... 但这不帮助你。 – DerWaldschrat 2012-08-08 11:25:48

+0

为什么不将参考号存储在数据库中?您可以基于当前时间戳生成它。 – 2012-08-08 11:27:27

回答

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

+0

当我有9999998条记录时,该怎么办?这段代码会在找到最后一个备用ID之前循环很长时间。这正是为什么连续的ID是一个好主意。 – DaveRandom 2012-08-08 11:32:07

+0

是的,我知道,这就是为什么我通常使用REF {ID},而不是随机数字,就像我以后开始的那样。有时候即使知道错误的答案也可以帮助你学习,在我看来 – 2012-08-08 11:39:32

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后面。

+0

我要测试这个并让你知道我找到了什么。谢谢。 – Foxinni 2013-01-18 11:43:36