欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實現(xiàn)生成唯一編號(36進制的不重復編號)

 更新時間:2014年07月01日 10:03:52   投稿:junjie  
這篇文章主要介紹了PHP實現(xiàn)生成唯一編號,文中使用10進制轉換36進制得到不重復的6000多萬個唯一編號,編號位數(shù)為10位,需要的朋友可以參考下

當我們要將一個龐大的數(shù)據(jù)進行編號時,而編號有位數(shù)限制,比如5位的車牌號、10位的某證件號碼、訂單流水號、短網(wǎng)址等等,我們可以使用36進制計算出符合位數(shù)的不重復的編號。

我們將0-Z(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)分別代表數(shù)值0-35,如字母Z代表35。這樣的話我要得到一個5位的編號,最大信息量就是36的5次方了,36^5 = 60466176,即最大的5位編號相當于10進制的數(shù)字:60466176。
本文中為了做演示,我們假定某俱樂部發(fā)放一批10位的會員卡號,會員卡號由3位城市編號+5位卡號編碼+2位校驗碼組成。城市編號用區(qū)號表示,如755代表深圳,5位卡編號則由36進制的卡編號組成,后面兩位校驗碼則是通過一定的算法生成的,校驗碼的用處是可以驗證卡號的合法性。這樣的話,我們生成的10位卡號相當于最大能滿足6000多萬會員卡號,并且是不重復唯一的卡號。

PHP實現(xiàn)

我們使用PHP進行進制轉換,10進制轉36進制。

復制代碼 代碼如下:

class Code {
    //密碼字典
    private $dic = array(
        0=>'0',    1=>'1', 2=>'2', 3=>'3', 4=>'4', 5=>'5', 6=>'6', 7=>'7', 8=>'8',    
        9=>'9', 10=>'A',  11=>'B', 12=>'C', 13=>'D', 14=>'E', 15=>'F',  16=>'G',  17=>'H',    
        18=>'I',19=>'J',  20=>'K', 21=>'L',  22=>'M',  23=>'N', 24=>'O', 25=>'P', 26=>'Q',    
    27=>'R',28=>'S',  29=>'T',  30=>'U', 31=>'V',  32=>'W',  33=>'X', 34=>'Y', 35=>'Z'
    );
 
 
    public function encodeID($int, $format=8) {
        $dics = $this->dic;
        $dnum = 36; //進制數(shù)
        $arr = array ();
        $loop = true;
        while ($loop) {
            $arr[] = $dics[bcmod($int, $dnum)];
            $int = bcdiv($int, $dnum, 0);
            if ($int == '0') {
                $loop = false;
            }
        }
        if (count($arr) < $format)
            $arr = array_pad($arr, $format, $dics[0]);
 
        return implode('', array_reverse($arr));
    }
 
    public function decodeID($ids) {
        $dics = $this->dic;
        $dnum = 36; //進制數(shù)
        //鍵值交換
        $dedic = array_flip($dics);
        //去零
        $id = ltrim($ids, $dics[0]);
        //反轉
        $id = strrev($id);
        $v = 0;
        for ($i = 0, $j = strlen($id); $i < $j; $i++) {
            $v = bcadd(bcmul($dedic[$id {
                $i }
            ], bcpow($dnum, $i, 0), 0), $v, 0);
        }
        return $v;
    }
 
}

我們定義Code類,先定義密碼字典,即0-Z分別對應的數(shù)值,方法encodeID($int, $format)中參數(shù)$int表示數(shù)字,$format表示位數(shù)長度,比方encodeID(123456789,5)表示將數(shù)字123456789轉換成5位的36進制編號,而方法decodeID($ids)用于將36進制的編號轉換成10進制的編號。
我們可以這樣來生成卡號:

復制代碼 代碼如下:

$code = new Code();
$card_no = $code->encodeID(888888,5);

如上,我們就可以得到一個5位的卡編號,它實際代表著卡號是888888(6個8)的會員編號,而實際進行轉換后是5位編號:0J1VC。
接著,我們將城市編號和校驗碼加上,城市編號是已經(jīng)定義好的,校驗碼則通過一定的算法取得,本例中,我們使用簡單的算法:將前三位城市編號和五位卡編號進行md5加密,然后取md5值的前2位作為校驗碼,這樣就得到了編號后面的兩位校驗碼。

復制代碼 代碼如下:

$card_pre = '755';
$card_vc = substr(md5($card_pre.$card_no),0,2);
$card_vc = strtoupper($card_vc);
echo $card_pre.$card_no.$card_vc;

實際應用中,可以通過數(shù)據(jù)庫得到10進制的編號,保證編號唯一,再將上述代碼組合,最終生成一個10位的不重復的會員卡號。

相關文章

  • PIGCMS 如何關閉聊天機器人

    PIGCMS 如何關閉聊天機器人

    這篇文章主要介紹了PIGCMS 如何關閉聊天機器人的幾種方法,非常實用,推薦給大家。
    2015-02-02
  • postman的安裝與使用方法(模擬Get和Post請求)

    postman的安裝與使用方法(模擬Get和Post請求)

    今天小編就為大家分享一篇postman的安裝與使用方法(模擬Get和Post請求),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • ThinkPHP里用U方法調用js文件實例

    ThinkPHP里用U方法調用js文件實例

    這篇文章主要介紹了ThinkPHP里用U方法調用js文件的方法,實例分析了ThinkPHP中U方法的使用技巧,需要的朋友可以參考下
    2015-06-06
  • PHP SPL標準庫之SplFixedArray使用實例

    PHP SPL標準庫之SplFixedArray使用實例

    這篇文章主要介紹了PHP SPL標準庫之SplFixedArray使用實例,SplFixedArray主要是處理數(shù)組相關的主要功能,它是固定長度的,比普通的數(shù)組處理更快,需要的朋友可以參考下
    2015-05-05
  • CI框架開發(fā)新浪微博登錄接口源碼完整版

    CI框架開發(fā)新浪微博登錄接口源碼完整版

    說明:本貼只適合CI框架。功能實現(xiàn):登錄接口跳轉鏈接成功,獲取用戶信息(包括最重要的u_id)成功,將用戶于本地平臺連接起來,用戶登錄成功后信息的存儲,本地數(shù)據(jù)庫第三方登錄表的設計??傊涌诹鞒桃讶客瓿?。每個關鍵步驟我?guī)缀醵加凶⑨?,講解詳細。
    2014-05-05
  • Laravel 5.5 異常處理 & 錯誤日志的解決

    Laravel 5.5 異常處理 & 錯誤日志的解決

    今天小編就為大家分享一篇Laravel 5.5 異常處理 & 錯誤日志的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • ThinkPHP3.1新特性之多層MVC的支持

    ThinkPHP3.1新特性之多層MVC的支持

    默認的模型層由Model類構成,但是隨著項目的增大和業(yè)務體系的復雜化,單一的模型層很難解決要求,從3.1開始推出了多層Model的支持。這篇文章主要介紹了ThinkPHP3.1多層MVC的支持,需要的朋友可以參考下
    2014-06-06
  • PHP實現(xiàn)微信發(fā)紅包程序

    PHP實現(xiàn)微信發(fā)紅包程序

    微信發(fā)紅包是比較流行的一件事情,老老少少都會使用微信發(fā)紅包,接下來,小編給大家分享在生活中常碰到的一個php實現(xiàn)微信發(fā)紅包程序的算法,希望這個程序對大家在做微信卡發(fā)的朋友有所幫助
    2015-08-08
  • Yii2創(chuàng)建多界面主題(Theme)的方法

    Yii2創(chuàng)建多界面主題(Theme)的方法

    這篇文章主要介紹了Yii2創(chuàng)建多界面主題(Theme)的方法,結合實例形式詳細分析了Yii2創(chuàng)建多界面主題的步驟與相關操作技巧,需要的朋友可以參考下
    2016-10-10
  • PHP判斷JSON對象是否存在的方法(推薦)

    PHP判斷JSON對象是否存在的方法(推薦)

    這篇文章主要介紹了PHP判斷JSON對象是否存在的方法(推薦)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07

最新評論