ホームページ > バックエンド開発 > PHPチュートリアル > PHP は固有の会員カード番号を生成します

PHP は固有の会員カード番号を生成します

WBOY
リリース: 2016-06-13 12:04:32
オリジナル
1087 人が閲覧しました

PHPは独自の会員証番号を生成します

ナンバープレートの5桁など、桁数に制限がある膨大なデータに番号を付けたい場合、 10 桁の文書番号、注文シリアル番号、短縮 URL などについては、16 進数を使用して桁数に一致する一意の番号を計算できます。

?

デモを見る DEMO
?

0 ~ Z (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) はそれぞれ、次のような値 0 ~ 35 を表します。文字 Z は 35 を表します。この場合、5 桁の数値を取得したいのですが、情報の最大量は 36 の 5 乗、36^5 = 60466176 です。つまり、最大 5 桁の数値は 10 進数に相当します。 60466176。

?

この記事では、デモンストレーションの目的で、クラブが 10 桁の会員カード番号のバッチを発行すると仮定します。会員カード番号は 3 桁の都市番号で構成されます。 5桁のカード番号コードと2桁のチェックコード。都市番号は市外局番で表されます。たとえば、755 は深センを表します。次の 2 つのチェック コードは、特定のアルゴリズムによって生成されます。コードはカード番号が正当であることを確認するためのものです。この場合、当社が生成する10桁のカード番号は最大6,000万件を超える会員カード番号に相当し、重複のない唯一のカード番号となります。

?

PHP

PHP を使用して 10 進数を 16 進数に変換します。

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; //进制数         $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; //进制数         //键值交换         $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 に対応する値を定義します。 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)ですが、実際に変換すると0J1VCという5桁の番号になります。

?

次に、都市番号とチェック コードを追加します。都市番号はすでに定義されており、この例では、単純なアルゴリズムを使用してチェック コードを取得します。 : 最初の 3 桁の都市番号と 5 桁のカード番号を md5 で暗号化し、md5 値の最初の 2 桁をチェック コードとして取得し、番号の後の 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- を生成します。重複しない数字の会員カード番号。

?

この記事は helloweba.com からのものです
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート