密码验证连续多位相同或者顺序字符引发的思考
需求
虽然用户对于这种复杂的密码验证恨之入骨,但是有时出于安全的考虑,我们系统不得不强制要求用户设置更高强度的密码。
如:不能连续出现多位相同或者连续的字符。
思考
对于常规的验证,我们通常使用正则表达式,所以我一开始也从这方面入手,但始终没有一个实现的思路。
后来看到有人用字符数组,通过下标判断是否连续,再加上偶然看到有人在讨论 ASCII 码,灵机一动,结合这两者就是一个很好的实现。
实现
简单实现,如下所示:
import static org.junit.Assert.*;
import org.junit.Test;
public class MainTest {
@Test
public void test() {
String password = "abcdd";
boolean isRepeat = isRepeatChar(password, 1);
boolean isOrder = isOrderChar(password, 3);
assertEquals(true, isRepeat);
assertEquals(true, isOrder);
}
/**
* 是否存在连续 i 位顺序字符
* @param str
* @param i 存在 i 位顺序字符,i 应大于等于1
* @return 如果 i 位顺序的字符&#