每10个字符/数字组合


every 10 character/number combination

好吧,我已经为此挣扎了一段时间,尝试使用excel和其他工具来生成每一个10个字符/数字组合,我决定用代码尝试一下?我试过用javascript,但似乎找不到任何代码这样做,我不希望任何重复想要它都结束在一个。txt文档。理想情况下,每行输出1个。提前感谢,我不介意使用其他语言,如PHP,但只需要帮助:/我已经尝试在PHP我的代码如下在我的网站。下面是代码的实际功能。再次谢谢你,Steve。

它不允许我在这里发布代码所以它在http://stephengoodings.com/combination/show.html

它生成了http://stephengoodings.com/combination/

我看不懂你的代码,你说

每一个可能的10个字符/数字组合

而你的代码生成了三个符号的组合

无论如何,我认为更简单的方法是考虑您使用36个符号- A到Z, 0到9 -在您的序列中的每个位置。如果你有一个一个字符序列,那么你将有36种可能,你可以从0到35进行编号。

如果你有一个两个字符序列,那么第一个位置有36种可能,第二个位置也有36种可能,这就是36乘以36(从00到0A到0Z,然后是A0,一直到ZZ)或36的第二次方。

所以如果你有十个位置,你最终会得到36的十分位;从0到的每个数字数字(- 1)将唯一标识一个且只有一个组合。你只需要在一个for循环中枚举它们。

反过来,从一个数字到一个组合,你使用模运算:

$symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ($i = 0; $i < BIG_NUMBER; $i++) {
    $start = $i;
    $seq   = '';
    for ($j = 0; $j < 10; $j++) {
        $k = $start % strlen($symbols);
        $start /= strlen($symbols);
        $sq  .= $symbols[$k];  // or $seq = $symbol[$k] . $seq;
    }
    print "$seq'n";
}

只要知道36的10次方是3656158440062976。虽然可以由64位数字保存,但生成所有组合将花费非常长的时间。

每秒100万次组合,我想大约是115年。

同样,11(10个字符和一个换行符)乘以36的10次方大于 30,000 tb。

我认为你最好确定你需要这个序列做什么,并以不同的方式实现这个问题。

例如:如果你需要在一百台计算机之间并行地暴力破解密码,你可以为每台计算机分配序列的一部分,这样就没有重复的努力,然后让每台计算机尝试解码并保存当前组合,而不是保存过去的组合。由于组合是按递增顺序枚举的,并且您知道每个系统的起点和终点,因此不会丢失任何信息,并且可以大大节省内存和磁盘空间。