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;

qaz,qwer这种都不能通过?这不算连续的吧,要实现这样的你只能把连续的可能性列出来,比如[q,w,e,r,t,y,u,i,o,p]为一组,比如你的密码包含wert四个字母,那你可以把这四个字母拆开,先使用w从数组中开始遍历,发现w与数组中第二个元素相等,那么再取密码的第二个字母w与数组中的第三个元素比较,如果相等再比较下一个,满足有三个字母对应上的就直接返回校验不通过。
如果是要校验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密码复杂度校验的主要内容,如果未能解决你的问题,请参考以下文章

js校验密码复杂度的正则表达式

JSJS校验密码复杂度(必须包含字母数字特殊符号)

密码强度校验

qt密码复杂度

在 Java 中获取文件的 MD5 校验和

Django组件-forms组件