亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP實(shí)現(xiàn)生成唯一編號(hào)(36進(jìn)制的不重復(fù)編號(hào))

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

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

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

PHP實(shí)現(xiàn)

我們使用PHP進(jìn)行進(jìn)制轉(zhuǎn)換,10進(jìn)制轉(zhuǎn)36進(jìn)制。

復(fù)制代碼 代碼如下:

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; //進(jìn)制數(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; //進(jìn)制數(shù)
        //鍵值交換
        $dedic = array_flip($dics);
        //去零
        $id = ltrim($ids, $dics[0]);
        //反轉(zhuǎn)
        $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分別對(duì)應(yīng)的數(shù)值,方法encodeID($int, $format)中參數(shù)$int表示數(shù)字,$format表示位數(shù)長(zhǎng)度,比方encodeID(123456789,5)表示將數(shù)字123456789轉(zhuǎn)換成5位的36進(jìn)制編號(hào),而方法decodeID($ids)用于將36進(jìn)制的編號(hào)轉(zhuǎn)換成10進(jìn)制的編號(hào)。
我們可以這樣來(lái)生成卡號(hào):

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

$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í)際應(yīng)用中,可以通過(guò)數(shù)據(jù)庫(kù)得到10進(jìn)制的編號(hào),保證編號(hào)唯一,再將上述代碼組合,最終生成一個(gè)10位的不重復(fù)的會(huì)員卡號(hào)。

相關(guān)文章

  • PIGCMS 如何關(guān)閉聊天機(jī)器人

    PIGCMS 如何關(guān)閉聊天機(jī)器人

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

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

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

    ThinkPHP里用U方法調(diào)用js文件實(shí)例

    這篇文章主要介紹了ThinkPHP里用U方法調(diào)用js文件的方法,實(shí)例分析了ThinkPHP中U方法的使用技巧,需要的朋友可以參考下
    2015-06-06
  • PHP SPL標(biāo)準(zhǔn)庫(kù)之SplFixedArray使用實(shí)例

    PHP SPL標(biāo)準(zhǔn)庫(kù)之SplFixedArray使用實(shí)例

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

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

    說(shuō)明:本貼只適合CI框架。功能實(shí)現(xiàn):登錄接口跳轉(zhuǎn)鏈接成功,獲取用戶信息(包括最重要的u_id)成功,將用戶于本地平臺(tái)連接起來(lái),用戶登錄成功后信息的存儲(chǔ),本地?cái)?shù)據(jù)庫(kù)第三方登錄表的設(shè)計(jì)。總之接口流程已全部完成。每個(gè)關(guān)鍵步驟我?guī)缀醵加凶⑨?,講解詳細(xì)。
    2014-05-05
  • Laravel 5.5 異常處理 & 錯(cuò)誤日志的解決

    Laravel 5.5 異常處理 & 錯(cuò)誤日志的解決

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

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

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

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

    微信發(fā)紅包是比較流行的一件事情,老老少少都會(huì)使用微信發(fā)紅包,接下來(lái),小編給大家分享在生活中常碰到的一個(gè)php實(shí)現(xiàn)微信發(fā)紅包程序的算法,希望這個(gè)程序?qū)Υ蠹以谧鑫⑿趴òl(fā)的朋友有所幫助
    2015-08-08
  • Yii2創(chuàng)建多界面主題(Theme)的方法

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

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

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

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

最新評(píng)論