加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 精灵使者 于 2012-4-29 16:05 编辑
精灵最近对密码产生了兴趣,于是精灵开始做随机序列生成器——密码符合复杂度要求的那种。
于是这个生成器每次运行可以生成一组密码,配合姓名输入处理就可以做一批更加复杂的解密密码输入器了……
嗯,就酱紫。
1.5整合了两种算法,提高灵活性
1.3-1.4 增添一个计算算法
1.2版更新:增加了复杂度认证。小于六位的密码将直接报告过短。
1.1版更新:完全简化了代码的生成方式
#=============================================================== #随机密码生成器v1.5 #创意:orzfly,禾西 修改并优化:精灵 #1.1版更新:完全简化了代码的生成方式 #1.2版更新:增加了复杂度认证。小于六位的密码将直接报告过短。 #1.3-1.4 增添一个计算算法 #1.5整合了两种算法,提高灵活性 #=============================================================== #必要参数 Specialnum = [*33..47]+[*58..64]+[*91..96]+[*123..126] #----------------------------------------------------------------- # length: 密码长度 # type:计算类型 #----------------------------------------------------------------- def rand_password(length = 6,type = 0) #密码过短提示 return "length is too short!" if length < 6 #获取必要的方法参数 if type = 0 length < 12 ? @pastype = 1 : @pastype = 2 else @pastype = type end case @pastype when 1 #计算算法,适合短密码 chrArr = [] chrArr << (48+rand(10)).chr chrArr << (65+rand(26)).chr chrArr << (97+rand(26)).chr chrArr << Specialnum[rand(Specialnum.size)].chr chrArr.delete_at(rand(4)) (length-3).times{chrArr << (33+rand(93)).chr} ret = "" for i in 0...length ret += chrArr.delete_at(rand(length-i)) end return ret when 2 #校验算法,适合长密码 loop do str_type = 0 ret = '' ret = Array.new(length).inject(''){|str,x| str+(33+rand(93)).chr} str_type += 1 if re.index(/[A-Z]/) str_type += 1 if re.index(/[a-z]/) str_type += 1 if re.index(/\d/) str_type += 1 if re.index(/[^\w]/) return ret if str_type > 2 end else #意外出错返回 return "Type Error!" end end
#===============================================================
#随机密码生成器v1.5
#创意:orzfly,禾西 修改并优化:精灵
#1.1版更新:完全简化了代码的生成方式
#1.2版更新:增加了复杂度认证。小于六位的密码将直接报告过短。
#1.3-1.4 增添一个计算算法
#1.5整合了两种算法,提高灵活性
#===============================================================
#必要参数
Specialnum = [*33..47]+[*58..64]+[*91..96]+[*123..126]
#-----------------------------------------------------------------
# length: 密码长度
# type:计算类型
#-----------------------------------------------------------------
def rand_password(length = 6,type = 0)
#密码过短提示
return "length is too short!" if length < 6
#获取必要的方法参数
if type = 0
length < 12 ? @pastype = 1 : @pastype = 2
else
@pastype = type
end
case @pastype
when 1
#计算算法,适合短密码
chrArr = []
chrArr << (48+rand(10)).chr
chrArr << (65+rand(26)).chr
chrArr << (97+rand(26)).chr
chrArr << Specialnum[rand(Specialnum.size)].chr
chrArr.delete_at(rand(4))
(length-3).times{chrArr << (33+rand(93)).chr}
ret = ""
for i in 0...length
ret += chrArr.delete_at(rand(length-i))
end
return ret
when 2
#校验算法,适合长密码
loop do
str_type = 0
ret = ''
ret = Array.new(length).inject(''){|str,x| str+(33+rand(93)).chr}
str_type += 1 if re.index(/[A-Z]/)
str_type += 1 if re.index(/[a-z]/)
str_type += 1 if re.index(/\d/)
str_type += 1 if re.index(/[^\w]/)
return ret if str_type > 2
end
else
#意外出错返回
return "Type Error!"
end
end
代码使用方法:插入main之前使用,调用方法:
rand_password(你需要的字符长度),默认为6位
顺便备份一些东西……
- #===============================================================
- #随机顺序生成器v1.1
- #创意:orzfly
- #===============================================================
- def shufflerange(len = 6)
- (1..len).to_a.sort_by{rand}
- end
复制代码 用法 shufflerange(你需要的字符长度)
复杂度要求:大写,小写,字符,数字四者至少选3个。
|