最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php根據(jù)id生成10位不重復(fù)數(shù)字跟字母混合字符串

 更新時(shí)間:2023年05月27日 16:13:36   投稿:wdc  
這篇文章主要介紹了php根據(jù)id生成10位不重復(fù)數(shù)字跟字母混合字符串方法,需要的朋友可以參考下

php根據(jù)id生成10位不重復(fù)數(shù)字跟字母混合字符串最終生成效果

S9q6Cdw9wB
e5D9uS6Lw2
w9G3KIJkwa
Q0F8d6LSwb
M7q3OvSDwC
C8g4MLZ2wD
S8L8d4xGwc
s8f19VIowE
Q5L2SV3bwF
H9W42ctdwG

php代碼

<?php
namespace  App\Services;
// 邀請(qǐng)碼服務(wù)
class  InviteCodeService
{
 protected  $key,$num,$wordKey,$numericKey;
 public  function  __construct()
    {
 $this->key = 'X1A3B2abCDcEFGdH4eI5JfK6LgNM7OhP8QiR9SjTkUlVmWnSoYpZqrstuvwxyz';
 $this->wordKey = 'AaBbCDcdeEfFgGihHIjJlKknmLqoNrwMpsvsOuPytQRzSTUVWSYZ';
 $this->numericKey = '1234567890';
 // 注意這個(gè)key里面不能出現(xiàn)數(shù)字0  否則當(dāng) 求模=0 會(huì)重復(fù)的
 // 多少進(jìn)制
 $this->num = strlen($this->key);
    }
 // 傳遞用戶id生成唯一邀請(qǐng)碼
 public  function  enCode(int  $user_id, $length = 10)
    {
 $code = $end = $begin = $middle = ''; // 邀請(qǐng)碼
 //末尾用取模算法保證唯一
 while ($user_id > 0) { // 轉(zhuǎn)進(jìn)制
 $mod = $user_id % $this->num; // 求模
 $user_id = ($user_id - $mod) / $this->num;
 $end = $this->key[$mod] .  $end;
        }
 // 開(kāi)頭使用4位隨機(jī)的數(shù)字加字母
 $begin = $this->wordKey[rand(0, strlen($this->wordKey) - 1)] .  $this->numericKey[rand(0, strlen($this->numericKey) - 1)] .  $this->wordKey[rand(0, strlen($this->wordKey) - 1)] .  $this->numericKey[rand(0, strlen($this->numericKey) - 1)];
 // 中間用隨機(jī)字符串補(bǔ)充
 while((strlen($begin)+strlen($middle)+strlen($end)) < $length){
 $middle = $this->key[rand(0, $this->num - 1)] .  $middle;
        }
 $code = $begin.$middle.$end;
 return  $code;
    }
     /**
     * 邀請(qǐng)碼獲取用戶id  一般都不需要用到
     * 這里的解密代碼不完整,思路是對(duì)的
     * 解密思路
     * 加密的時(shí)候最后一位記錄唯一串的長(zhǎng)度,也就是 $end 的長(zhǎng)度
     * 解密的時(shí)候讀取串的最后一位獲得長(zhǎng)度,根據(jù)長(zhǎng)度獲取 $end 字符串
     * $end 通過(guò)以下函數(shù)就能實(shí)現(xiàn)解密
     * */ 
    function deCode($code)
    {
        if (strrpos($code, '0') !== false)
            $code = substr($code, strrpos($code, '0') + 1);
        $len = strlen($code);
        $code = strrev($code);
        $user_id = 0;
        for ($i = 0; $i < $len; $i++)
            $user_id += strpos($this->key, $code[$i]) * pow($this->num, $i);
        return $user_id;
    }
$a = 3600;
$b = $a + 10;
for($i=$a ; $i<$b;$i++){
 echo (new  InviteCodeService)->enCode($i); echo PHP_EOL;
}

20w 數(shù)據(jù)是沒(méi)有重復(fù)的,并且邀請(qǐng)碼解 用戶id 也是正確的。

要注意的

$this->key 不能出現(xiàn)數(shù)字 0

$this->key 不能有重復(fù)的字符串。 如: abccd c重復(fù)。

關(guān)于$this->key

$this->key 順序可以打亂的,

// $this->key = 'abcdefghjkmnpqrstuvwxyz123456789'; // 沒(méi)打亂的
$this->key = 'kh8sjpdazetnmb5yw7rq4gc9fuv3216x'; // 打亂的

$this->key 長(zhǎng)度不限制, 但是最好別太短。
如 abcd: 最大的 用戶id 是4的3次方 (256)
超過(guò)256會(huì)怎么樣? 邀請(qǐng)碼變成5位而已 ……. ,不好看。

為用戶體驗(yàn),$this->key 字符串別加 i o l 這些字母,因?yàn)槿菀谆煜脩簟?br />i : ll : 1o : 0 (當(dāng)然0 是不能出現(xiàn)的)
很相似。

結(jié)尾

中間四位字符串確保有字符串+數(shù)字,

尾數(shù)6位數(shù)確保隨機(jī)性,6位數(shù)足夠61^6次方,也就是 51520374361,這個(gè)數(shù)字比 int(11)表示的最大值 2147483648 還要大 49372890713。5位數(shù)就足夠覆蓋 int(11),剩余一位由開(kāi)頭補(bǔ)充

開(kāi)頭補(bǔ)充數(shù)字確保夠10位

以上就是php根據(jù)id生成10位不重復(fù)數(shù)字跟字母混合字符串的詳細(xì)內(nèi)容,更多關(guān)于php根據(jù)id生成10位不重復(fù)數(shù)字跟字母混合字符串的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

花莲县| 五莲县| 景宁| 溧水县| 赫章县| 临西县| 改则县| 安福县| 廉江市| 仙游县| 天等县| 思南县| 墨脱县| 镇远县| 宁城县| 和平区| 黑山县| 银川市| 双城市| 榆中县| 柏乡县| 恭城| 徐水县| 缙云县| 柏乡县| 碌曲县| 托克逊县| 宝丰县| 英德市| 屯昌县| 原平市| 安乡县| 会昌县| 奉化市| 泊头市| 来宾市| 龙口市| 陆良县| 中江县| 旺苍县| 昭通市|