PHP は数値 ID から文字 ID への変換を実装します_PHP チュートリアル

WBOY
リリース: 2016-07-21 14:58:53
オリジナル
1094 人が閲覧しました

Web サイトに表示される ID は通常数字ですが、たとえば YouTube の動画再生ページの URL は文字であることが多いです。 アルファベットの ID を生成する方法は次のとおりです。
使用例:

コードをコピー コードは次のとおりです:

alphaID(12354); //数値を文字に変換します。
alphaID('PpQXn7COf',true); // 文字 ID を対応する数値に変換します。
alphaID(12354,false,6); //生成される文字IDの長さを6に指定します

ソースコード:
コードをコピーします コードは次のとおりです:

/**
* 数字を短い英数字バージョンに変換します
*
* 9007199254740992 までの任意の数字を文字の短いバージョンに変換します
* 例:
* 9007199254740989 --> PpQXn7COf
*
* 2 番目の引数を true に指定すると、
* のように逆変換されます。 例:
* PpQXn7COf --> 9007199254740989
*
* この関数は、any2dec && dec2any by
* fragmer[at]mail[dot]ru
* 参照: http://nl3.php.net/manual/en/function.base-convert.php #52450
*
* alphaID を少なくとも 3 文字の長さにしたい場合は、
* $pad_up = 3 引数を使用してください
*
* ほとんどの場合、これは完全にランダムな ID ジェネレーター
* を簡単に回避できるため、重複した ID です。
* たとえば、アルファ ID をデータベース内の自動インクリメント ID
* に関連付ければ、完了です。
*
* 逆の場合は、少し難解になるためです。
* ただし、ファイルシステム上のさまざまな
* ディレクトリに多数の ID を分散することが簡単になります。例:
* $part1 = substr($alpha_id,0,1);
* $part2 = substr($alpha_id,1,1);
* $part3 = substr($alpha_id,2,strlen($alpha_id)) ;
* $destindir = "/".$part1."/".$part2."/".$part3;
* // 逆にすることで、ディレクトリはより均等に分散されます。 The
* // 最初の 26 ディレクトリはすでに 26 のメイン レベルを占有しています
*
* 制限の詳細:
* - http://blade.nagakiut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk /165372
*
* より大きな数値に対してこれが本当に必要な場合は、おそらく次のようなものを参照する必要があります
*: http://theserverpages.com/php/manual/en/ref.bc.php
* または: http: //theserverpages.com/php/manual/en/ref.gmp.php
* しかし、これについては詳しく調べていません。これらの
* に関する詳細情報がある場合は、お気軽にコメントを残してください。
*
* @author Kevin van Zonneveld
* @author Simon Franz
* @author Deadfish
* @copyright 2008 Kevin van Zonneveld (http://kevin.vanzonneveld.net)
* @license http://www.opensource.org/licenses/bsd-license.php 新しい BSD ライセンス
* @version SVN: リリース: $Id: alphaID .inc.php 344 2009-06-10 17:43:59Z kevin $
* @link http://kevin.vanzonneveld.net/
*
* @parammixed $in 翻訳する文字列または長い入力
* @param boolean $to_num true の場合に変換を反転します
* @parammixed $pad_up 数値またはブール値は、指定された長さまで結果をパディングします
* @param string $passKey パスワードを指定すると、元の ID の計算が難しくなります
*
* @returnmixed文字列または長い
 */
function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
{
$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if ( $passKey !== null) {
// この関数の目的は、
// ID を短くすることだけですが、それほど安全ではありません
// Simon Franz によるこのパッチ (http://blog.snaky. org/)
// オプションでパスワードを入力して、より難しくすることができます
// 対応する数値 ID を計算します

for ($n = 0; $n $i [] = substr( $index,$n ,1);
}

$passhash = hash('sha256',$passKey);
$passhash = (strlen($passhash) < strlen($index))
? hash('sha512',$passKey)
: $passhash;

for ($n=0; $n < strlen($index); $n++) {
$p[] = substr($passhash, $n ,1);
}

array_multisort($p, SORT_DESC, $i);
$index = implode($i);
}

$base = strlen($index);

if ($to_num) {
// デジタル数字 <<-- アルファベット文字コード
$in = strrev($in);
$out = 0;
$len = strlen($in) - 1;
for ($t = 0; $t <= $len; $t++) {
$bcpow = bcpow($base, $len - $t);
$out = $out + strpos($index, $t, 1) ) * $bcpow;
}

if (is_numeric($pad_up)) {
$pad_up--;
if ($pad_up > 0) {
$out -= pow($base, $pad_up);
}
}
$out =スプリントフ('%F', $out);
$out = substr($out, 0, strpos($out, '.'));
} else {
// デジタル数値 -->>  アルファベット文字コード
if (is_numeric($pad_up)) {
$pad_up--;
if ($pad_up > 0) {
$in += pow($base, $pad_up);
}
}

$ out = "";
for ($t = Floor(log($in, $base)); $t >= 0; $t--) {
$bcp = bcpow($base, $t);
$a = Floor($in / $bcp) % $base;
$out = $out 。 substr($index, $a, 1);
$in = $in - ($a * $bcp);
}
$out = strrev($out); // reverse
}

return $out;
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/328184.html技術記事 ID は、Web サイトで頻繁に表示されるもので、通常は数字ですが、私たちが公開している Web サイトの多くの ID は、YouTube のビデオ放送の URL のような/watch?v=yzNjIBEdyww のように文字化されています。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!