You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET环境下检测密码中长度≥5的正序逆序字母数字连续序列方案

.NET 密码连续序列校验实现方案

不推荐使用正则实现该需求:正则本身不擅长处理字符ASCII差值判断的场景,硬写正则不仅可读性极差、容易遗漏边界,后续维护成本也很高,直接遍历字符校验是更合适的方案。

实现代码

public bool CheckForInvalidSequence(string input)
{
    // 长度不足5直接返回无违规序列
    if (string.IsNullOrWhiteSpace(input) || input.Length < 5)
        return false;
    
    // 统一转大写,忽略大小写差异
    char[] chars = input.ToUpperInvariant().ToCharArray();
    
    // 遍历所有连续5个字符的窗口
    for (int i = 0; i <= chars.Length - 5; i++)
    {
        char c0 = chars[i];
        char c1 = chars[i+1];
        char c2 = chars[i+2];
        char c3 = chars[i+3];
        char c4 = chars[i+4];
        
        // 判断是否为同类型字符:全数字 或 全字母
        bool allDigits = char.IsDigit(c0) && char.IsDigit(c1) && char.IsDigit(c2) && char.IsDigit(c3) && char.IsDigit(c4);
        bool allLetters = char.IsLetter(c0) && char.IsLetter(c1) && char.IsLetter(c2) && char.IsLetter(c3) && char.IsLetter(c4);
        if (!allDigits && !allLetters)
            continue;
        
        // 判断正序连续(后一个字符比前一个大1)
        bool isAsc = c1 - c0 == 1 && c2 - c1 == 1 && c3 - c2 == 1 && c4 - c3 == 1;
        // 判断逆序连续(后一个字符比前一个小1)
        bool isDesc = c0 - c1 == 1 && c1 - c2 == 1 && c2 - c3 == 1 && c3 - c4 == 1;
        
        if (isAsc || isDesc)
            return true;
    }
    
    // 未检测到违规序列
    return false;
}

说明:返回true代表检测到违规连续序列,密码校验不通过;返回false代表无违规序列。

方案优势

  • 逻辑清晰无歧义:所有判断规则一目了然,后续需要调整拦截的连续长度(比如改为≥6位才拦截),只需要修改窗口长度和对应判断逻辑即可
  • 无漏判误判:只会拦截真正连续递增/递减的序列,不会像你之前的正则一样把AEIOU这类不连续的不重复字符误判为违规
  • 性能优异:密码长度一般都在20位以内,遍历开销可以忽略不计,远高于正则匹配的性能

内容的提问来源于stack exchange,提问作者Scooter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:45:04