PHPで重複しないエンコーディングを実現する方法
重複しないエンコーディングを実現する
php メソッド: 1. PHP サンプル ファイルを作成する; 2. PHP を使用して 16 進数変換を実行する; 3. データベースから 10 進数を取得し、その数値が一意であることを確認します。
#この記事の動作環境: Windows 7 システム、PHP バージョン 7.4、Dell G3 コンピューター。
php で重複しないエンコーディングを実現するにはどうすればよいですか?
PHP 実装は、一意の番号 (36 桁の非繰り返し番号) を生成します。
巨大なデータに番号を付けたい場合、そこにある番号5 桁のナンバー プレート番号、10 桁の ID 番号、注文シリアル番号、短縮 URL などの桁制限です。16 進数を使用して、その桁を満たす非繰り返しの数値を計算できます。
文字 Z は 35 を表すなど、0 ~ Z (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) を使用して値 0 ~ 35 をそれぞれ表します。今回は5桁の数値を取得したいのですが、最大情報量は36の5乗、36^5 = 60466176、つまり最大5桁の数値は10進数に相当します: 60466176 。
この記事ではデモンストレーションのために、クラブが 10 桁の会員カード番号をまとめて発行すると仮定します。会員カード番号は 3 桁の都市番号、5 桁のカード番号で構成されます。コードと2桁のチェックコード。都市番号は市外局番で表されます。たとえば、755は深センを表します。5桁のカード番号は36桁のカード番号で構成されます。次の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 = bcp($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 桁の 16 進数に変換することを意味し、メソッド decodeID($ids) は 16 進数を 10 進数に変換するために使用されます。 。
カード番号は次のように生成できます:
$code = new Code(); $card_no = $code->encodeID(888888,5);
上記のように、5 桁のカード番号を取得できます。これは、実際にはカード番号 888888 (8 が 6 つ) の会員番号を表します。 , 実際に変換すると、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 桁の重複しない会員カード番号を生成します。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPで重複しないエンコーディングを実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。
