Board logo

标题: [文本处理] [已解决]请教生成字母加数字能用BAT吗 [打印本页]

作者: kkfgef    时间: 2015-8-29 14:30     标题: [已解决]请教生成字母加数字能用BAT吗

有26个字母{a-Z}和10个数字{0-9}
如果要生成8位字符的,区分大小写,
这样的排列是(26+26+10)8次方=218340105584896个,这218万亿
但相邻不能有两个或以上相同的如{a1b2cc90,这个字符出现了两次cc}
这样的数据可以用PHP来产生吗?
如果生成单个文本数据应该不太可能,得切割成好多份……
这可以用BAT来处理生成多个文本吗
作者: pcl_test    时间: 2015-8-29 17:04

  1. 1>1/* :
  2. @echo off
  3. cscript -nologo -e:jscript "%~f0"
  4. pause & exit/b
  5. */
  6. var fso = new ActiveXObject("Scripting.FileSystemObject");
  7. var i = j = 0;
  8. var z = '';
  9. var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  10. var arr1 = str.split('');
  11. for (var a=0;a<arr1.length;a++){
  12.     var arr2 = str.replace(arr1[a],'').split('');
  13.     for (var b=0;b<arr2.length;b++){
  14.         var arr3 = str.replace(arr2[b],'').split('');
  15.         for (var c=0;c<arr3.length;c++){
  16.             var arr4 = str.replace(arr3[c],'').split('');
  17.             for (var d=0;d<arr4.length;d++){
  18.                 var arr5 = str.replace(arr4[d],'').split('');
  19.                 for (var e=0;e<arr5.length;e++){
  20.                     var arr6 = str.replace(arr5[e],'').split('');
  21.                     for (var f=0;f<arr6.length;f++){
  22.                         var arr7 = str.replace(arr6[f],'').split('');
  23.                         for (var g=0;g<arr7.length;g++){
  24.                             var arr8 = str.replace(arr7[g],'').split('');
  25.                             for (var h=0;h<arr8.length;h++){
  26.                                 var s = arr1[a]+arr2[b]+arr3[c]+arr4[d]+arr5[e]+arr6[f]+arr7[g]+arr8[h];
  27.                                 i++;
  28.                                 z = z + s + '\r\n';
  29.                                 //每一百万条数据生成一个文本
  30.                                 if (i==1000000){
  31.                                     i = 0;
  32.                                     j++;
  33.                                     fso.CreateTextFile(j+'.txt',2).WriteLine(z);
  34.                                     z = '';
  35.                                 }
  36.                             }
  37.                         }
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.     }
  43. }
复制代码

作者: CrLf    时间: 2015-8-29 17:32

本帖最后由 CrLf 于 2015-8-29 17:43 编辑

纯批来一发
  1. @echo off&setlocal enabledelayedexpansion
  2. set list=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  3. for /l %%a in (1 1 100) do (
  4. set "password="
  5. for /l %%b in (0 1 7) do (
  6. set /a "rand=!random!%%(61 + ^!%%b)"
  7. for %%z in (!rand!) do (
  8. set password=!password!!list:~-%%z,1!
  9. set list=!list:~%%z!!list:~,%%z!
  10. )
  11. )
  12. echo !password!
  13. )
  14. pause
复制代码

作者: CrLf    时间: 2015-8-29 17:35

哦,好吧,是排列组合不是产生随机字符串
楼主这是要搞彩虹表吗?
作者: kkfgef    时间: 2015-8-31 13:14

回复 2# pcl_test


    非常感谢,可是这个要生成的话,不知我的电脑要开到什么时候了,能不能帮我更改一下生成随机的,比如生成随机一亿条数据(同样每条数据不包括两个相同字符的AA,11,cc……),并每百万一文本,这样也就一百个文件,如果是全部生成那要9亿多M了,电脑放不下……
作者: pcl_test    时间: 2015-8-31 13:25

回复 5# kkfgef

本版规则
1、求助时,务必在顶楼一次性把问题交代清楚,建议给出完整有针对性的样本,样本过大可发网盘分享链接。勿发无意义的标题
2、使用 code 标记把代码部分括起来(单击回复框的 <> 按钮,复制粘贴代码进去),以便复制。问题解决后,请编辑顶楼帖子在标题前面注明[已解决]http://www.bathome.net/thread-3473-1-1.html
3、提问前先使用论坛搜索,相同或类似的问题就无需再发帖了
作者: 回家路上    时间: 2015-8-31 13:38

回复 5# kkfgef


那你就用pcl_test的程序生成100000000的时候退出不就行了吗。
作者: kkfgef    时间: 2015-8-31 14:13

回复 7# 回家路上


    问题他这个不是随机的……而是排列的数据,我想要随机生成。
作者: kkfgef    时间: 2015-8-31 14:15

回复 6# pcl_test


    还是非常感谢你的思路……
作者: pcl_test    时间: 2015-8-31 14:18

本帖最后由 pcl_test 于 2015-8-31 14:22 编辑

回复 9# kkfgef
以后直接发实际问题,不要浪费别人的时间和精力
一种不是很高效的方法
  1. 1>1/* :
  2. @echo off&cscript -nologo -e:jscript "%~f0"&pause & exit/b
  3. */
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var arr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');
  6. var z = '';
  7. var j =n =0;
  8. while (1){
  9.     var s = '';
  10.     for (var i=0;i<8;i++){
  11.         var t = Math.floor(Math.random()*62);
  12.         s = s+arr[t];
  13.     }
  14.     if (!/.*([a-zA-Z\d])\1.*/.test(s)){
  15.         z = z+s+'\r\n';
  16.         j++;
  17.     }
  18.     //每一百万条数据生成一个文本
  19.     if (j==1000000){
  20.         n++;
  21.         fso.CreateTextFile(n+'.txt',2).WriteLine(z);
  22.         j = 0;
  23.         z = '';
  24.     }
  25.     //共生成一百个文本
  26.     if (n==100)break;
  27. }
复制代码

作者: CrLf    时间: 2015-8-31 17:27

靠靠靠靠,那不就是我在 3 楼理解的意思吗?楼主都不去试代码,我特么还写给你做什么!

---------------------------------------------------------

借 10 楼代码改一下:
  1. 1>1/* :
  2. @echo off&cscript -nologo -e:jscript "%~f0"&pause & exit/b
  3. */
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var arr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');
  6. var j = n = i =0;
  7. var z = s = c = '';
  8. //共生成一百个文本
  9. for(n=1;n<=100;n++){
  10. z = '';
  11. //每一百万条数据生成一个文本
  12. for(j=10000;j--;){
  13. s = '';
  14. for (var i=0;i<8;i++){
  15. var t = Math.floor(Math.random() * (61+!i));
  16. arr.push(c = arr.splice(t,1)[0]);
  17. s+=c;
  18. }
  19. z+=s+'\r\n';
  20. }
  21. fso.CreateTextFile(n+'.txt',2).WriteLine(z);
  22. }
复制代码

作者: terse    时间: 2015-9-1 09:27

也来一个
  1. @if(0)==(0) echo off
  2. cscript -NoLogo -E:JScript %0
  3. pause & exit /b @end
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var arr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split('');
  6. var i = 10000;
  7. while (i--) {
  8. var j = 10000,s = '';
  9.     while (j--) {
  10.         s+=arr.sort(function(){ return 0.5 - Math.random()}).join("");
  11.     }
  12.     fso.CreateTextFile(i+'.txt',2).Write(s.match(/\w{8}/g).join('\r\n'));
  13. }
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2