當我們要將乙個龐大的資料進行編號時,而編號有位數限制,比如5位的車牌號、10位的某證件號碼、訂單流水號、短**等等,我們可以使用36進製計算出符合位數的不重複的編號。
我們將0-z(0123456789abcdefghijklmnopqrstuvwxyz)分別代表數值0-35,如字母z代表35。這樣的話我要得到乙個5位的編號,最大資訊量就是36的5次方了,36^5 = 60466176,即最大的5位編號相當於10進製的數字:60466176。
本文中為了做演示,我們假定某俱樂部發放一批10位的會員卡號,會員卡號由3位城市編號+5位卡號編碼+2位校驗碼組成。城市編號用區號表示,如755代表深圳,5位卡編號則由36進製的卡編號組成,後面兩位校驗碼則是通過一定的演算法生成的,校驗碼的用處是可以驗證卡號的合法性。這樣的話,我們生成的10位卡號相當於最大能滿足6000多萬會員卡號,並且是不重複唯一的卡號。
php我們使用php進行進製轉換,10進製轉36進製。
class code
} if (count($
arr) < $
format)
$arr = array_pad($
arr, $
format, $
dics[0]);
return implode('', array_reverse($
arr));
} public
function decodeid($
ids)
], bcpow($
dnum, $
i, 0), 0), $
v, 0);
} return
$v;
} }
我們定義code類,先定義密碼字典,即0-z分別對應的數值,方法encodeid($int, $format)中引數$int表示數字,$format表示位數長度,比方encodeid(123456789,5)表示將數字123456789轉換成5位的36進製編號,而方法decodeid($ids)用於將36進製的編號轉換成10進製的編號。
我們可以這樣來生成卡號:
$
code = new code();
$card_no = $
code->encodeid(888888,5);
如上,我們就可以得到乙個5位的卡編號,它實際代表著卡號是888888(6個8)的會員編號,而實際進行轉換後是5位編號:0j1vc。
接著,我們將城市編號和校驗碼加上,城市編號是已經定義好的,校驗碼則通過一定的演算法取得,本例中,我們使用簡單的演算法:將前三位城市編號和五位卡編號進行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;
實際應用中,可以通過資料庫得到10進製的編號,保證編號唯一,再將上述**組合,最終生成乙個10位的不重複的會員卡號。 PHP實現生成唯一會員卡號
在不查詢資料庫的情況下,每個會員登入進來會生成乙個數字字母組合不重複的會員卡號。效果圖如下 當我們要將乙個龐大的資料進行編號時,而編號有位數限制,比如5位的車牌號 10位的某證件號碼 訂單流水號 短 等等,我們可以使用36進製計算出符合位數的不重複的編號。我們將0 z 0123456789abcde...
PHP 會員賬號單唯一登入
同一會員賬號限制在同一臺裝置 電腦 手機 ipad等 上單點登入,重複登入後,原登入訪問頁面時則直接跳轉到登入頁面且需要重新登入才能正常訪問。a賬號在a電腦上登入後,a賬號此時又用b電腦再次登入,則a電腦請求頁面時,提示 重新登入 的資訊,並跳轉到登入頁面 a賬號在a電腦上登入後,把session ...
php 生成唯一ID
function guid factor prefix suffix 生成因子 機器毫秒,使用者瀏覽器與作業系統資訊,使用者ip,隨機因子,及自定義 factor 因子 原理 自定義 factor 因子 例如可使用使用者 user id 模組標識 product,order.字首 prefix 可用...