java密码复杂度校验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java密码复杂度校验相关的知识,希望对你有一定的参考价值。
要求如下:
1,必须包含大小写(8-20)
2,必须包含数字
3,必须包含特殊字符
4,不能连续数字或字母
我现在已经实现了前三点,第四点真的难到我了,比如qaz,qwer,1234这种都,都不能通过校验,这种@Ab180test可以通过
想到纯数字的办法了,有点投机取巧,感谢1楼大哥的代码指点
public static boolean isOrderNumeric(String numOrStr)
boolean tag = false;
int count1 = 0;
int count2 = 0;
int count3 = 0;
for (int i = 0;i<numOrStr.length();i++)
if (tag)
if (Character.isDigit(numOrStr.charAt(i)))
int num1 = Integer.parseInt(numOrStr.charAt(i) + "");
int num2 = Integer.parseInt(numOrStr.charAt(i - 1) + "") + 1;
if (num1 == num2)
count1 += 1;
if (count1 >= 2)
return true;
if (i>=1)
int num3 = Integer.parseInt(numOrStr.charAt(i) + "")+ 1;
int num4 = Integer.parseInt(numOrStr.charAt(i - 1) + "");
if (num3 == num4)
count2 += 1;
if (count2 >= 2)
return true;
int num5 = Integer.parseInt(numOrStr.charAt(i) + "");
int num6 = Integer.parseInt(numOrStr.charAt(i - 1) + "");
if (num5 == num6)
count3 += 1;
if (count3 >= 2)
return true;
tag = Character.isDigit(numOrStr.charAt(i));
return false;
如果是要校验0123456789和abcdefg这样的连续的,你可以把密码的拆分成char数组,数组每个元素转成数值其实就是这个字符的ascii码,然后比较相邻的三个元素ascii码是不是连续的就可以判断出来,不过这种方法需要注意一点,比如'@'的ascii为64,'A'的ascii为65也是连续的,需要自己进行筛选。觉得这种方法麻烦的话也可以使用上面的方法把连续的都先列举出来。
我只写一下我的想法,仅供参考。追问
那如果只是数字不能相连呢
追答数字就很简单了呀 创建一个数组[0,1,2,3,4,5,6,7,8,9],用第一种方法逐个比较就行了
参考技术A 前面三个条件不是已经限制 第四个条件了吗?前面三个条件成立下,怎么会有续数字或字母呢?追问前面的条件只是要求必须有,但比如Test123456!就可以通过,很明显123456不符合第四条要求
追答这种@Ab123test就不行?
追问对,这种就不可以,不能连续
追答// 不能是连续的数字--递增(如:123456、12345678)连续数字返回true
public static boolean isOrderNumeric(String numOrStr)
boolean flag = true;// 如果全是连续数字返回true
boolean isNumeric = true;// 如果全是数字返回true
for (int i = 0; i 0) // 判断如123456
int num = Integer.parseInt(numOrStr.charAt(i) + "");
int num_ = Integer.parseInt(numOrStr.charAt(i - 1) + "") + 1;
if (num != num_)
flag = false;
break;
else
flag = false;
return flag;
大哥,你这个方法只能判断纯数字的密码啊
本回答被提问者采纳js校验密码复杂度的正则表达式
1、密码中必须包含大小字母、数字、特称字符,至少8个字符,最多30个字符
1 var regex = new RegExp(‘(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,30}‘); 2 3 if (!regex.test(‘88888aaa‘)) { 4 alert("密码强度不够。密码中必须包含字母、数字、特殊字符,且长度大于8,小于30"); 5 }
2、密码中必须包含字母、数字、特称字符,至少8个字符,最多30个字符。
var regex = new RegExp(‘(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,30}‘);
3、密码中必须包含字母、数字,至少8个字符,最多30个字符。
var regex = new RegExp(‘(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}‘);
以上是关于java密码复杂度校验的主要内容,如果未能解决你的问题,请参考以下文章