PHP如何成生1000W条4位的号码

PHP如何成生1000W条4位的号码

奈何桥上唱咆哮 发布于 2021-11-28 字数 92 浏览 996 回复 12

1234567890ABCDEFGHIGKLM....Z

生成4位数共1000W个不重复的。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

冷默言语 2021-12-01 12 楼

这是啥需求? 长度加长点这个问题不就很好解决了

反目相谮 2021-12-01 11 楼

引用来自“梦想岛”的评论

10进制换成36进制,

代码在这里。

http://www.jb51.net/article/51705.htm

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; 
    } 
 
} 

<?php
$code = new Code(); 
for($i=1;$i<10000000;$i++){
    $card_no = $code->encodeID($i,4);
}

测试。4位数不够用,最大1679615 == ZZZZ

左岸枫 2021-12-01 10 楼

引用来自“聽雨人”的评论

36^4 = 1 679 616 哪里来的千万个?

别再吹冷风 2021-12-01 9 楼

没错 用进制转换的思路

泛滥成性 2021-12-01 8 楼

http://blog.csdn.net/yang3290325/article/details/8028670 这里有个排列组合的方法,你把$arr的值换成array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)); 试试。

需要很多内存,你还得使用init_set('memory_limit', '1024M');去设置php可以使用的内存大小。

眼眸里的那抹悲凉 2021-12-01 7 楼

那我改成5位吧。

无人问我粥可暖 2021-12-01 6 楼

base_convert .......

千笙结 2021-12-01 5 楼

10进制换成36进制,

代码在这里。

http://www.jb51.net/article/51705.htm

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; 
    } 
 
} 

<?php
$code = new Code(); 
for($i=1;$i<10000000;$i++){
    $card_no = $code->encodeID($i,4);
}

测试。4位数不够用,最大1679615 == ZZZZ

离不开的别离 2021-12-01 4 楼

http://hashids.org 看下这个,1到一千万循环加密输出一下。

蓝颜夕 2021-11-30 3 楼

大小写混合后有多少

醉生梦死 2021-11-30 2 楼

36^4 = 1 679 616 哪里来的千万个?

岁月打碎记忆 2021-11-28 1 楼

用程序生成一下。怎么整。。