本帖最后由 ShadowFiend 于 2013-7-23 17:46 编辑
现在第六题,看有时间再做其他- @rem 第六题
- @echo off
- set ucase=ABCDEFGHIJKLMNOPQRSTUVWXYZ
- set lcase=abcdefghijklmnopqrstuvwxyz
- set num=0123456789
- rem 下面是除了space外的特殊字符,共32个
- set "spec=!#$%%&'()*+,-./:;<=>?@[\]^_`{|}~""
- set "all=%ucase%%lcase%%num%%spec%"
- set /a len=26+26+10+32,count=1
- setlocal enabledelayedexpansion
-
- :start
- set op=&set o=
- rem 先分别在四种类型字符中选一个,保证至少存在四类字符
- for %%i in (%ucase%_26 %lcase%_26 %num%_10) do (
- set "tmp=%%i"
- set /a n=!random!%%!tmp:~-2!
- for %%j in (!n!) do set "op=!op!!tmp:~%%j,1!"
- )
- rem 特殊字符特殊处理
- set /a n=!random!%%32
- for %%i in (!n!) do set "op=!op!!spec:~%%i,1!"
- rem 再从所有字符中选出剩余的四个字符
- for /l %%i in (1 1 4) do (
- set /a n=!random!%%%len%
- for %%j in (!n!) do set "op=!op!!all:~%%j,1!"
- )
- rem 对8个字符做乱序处理,保证随机性
- for /l %%i in (8 -1 1) do (
- set /a n=!random!%%%%i
- for %%j in (!n!) do (
- set "o=!o!!op:~%%j,1!"
- set /a q=!n!+1
- for %%k in (!q!) do (set "op=!op:~0,%%j!!op:~%%k,8!")
- )
- )
- rem 判断是否重复,不重复则输出,出现重复的概率太小,个人认为没必要判断
- if %count% leq 100 (
- set c=%count%
- if %count% lss 100 (
- if %count% lss 10 (
- set c=00%count%
- ) else (
- set c=0%count%
- )
- )
- echo username: Bathome!c! password: !o!
- set /a count+=1
- if %count% lss 100 (goto start)
- )
- pause
复制代码
|