-
c# 检测密码强度,评分规则仿google
参考delphi的代码更改为C#
Delphi 检测密码强度 规则(仿 google)
仿 google 评分规则
一、密码长度:
5 分: 小于等于 4 个字符
10 分: 5 到 7 字符
25 分: 大于等于 8 个字符
二、字母:
0 分: 没有字母
10 分: 全都是小(大)写字母
20 分: 大小写混合字母
三、数字:
0 分: 没有数字
10 分: 1 个数字
20 分: 大于等于 3 个数字
四、符号:
0 分: 没有符号
10 分: 1 个符号
25 分: 大于 1 个符号
五、奖励:
2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号
最后的评分标准:
= 90: 非常安全
= 80: 安全(Secure)
= 70: 非常强
= 60: 强(Strong)
= 50: 一般(Average)
= 25: 弱(Weak)
= 0: 非常弱
代码如下
/// <summary>
/// 得到强度的文本描述
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
public static string GetkPasswordStrong(string password)
{
int strong=CheckPasswordStrong(password);
if (strong >= 90)
return $"非常安全{strong}";
else if (strong >= 80)
return $"安全{strong}";
else if (strong >= 70)
return $"非常强{strong}";
else if (strong >= 60)
return $"强{strong}";
else if (strong >= 50)
return $"一般{strong}";
else if (strong >= 25)
return $"弱{strong}";
else
return $"非常弱{strong}";
}
/// <summary>
/// 检测密码强度,规则(仿 google)
///
///= 90: 非常安全
///>= 80: 安全(Secure)
///>= 70: 非常强
///>= 60: 强(Strong)
///>= 50: 一般(Average)
///>= 25: 弱(Weak)
///>= 0: 非常弱
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
public static int CheckPasswordStrong(string password) //检测密码强度 规则(仿 google)
{
int Result = 0;
int i, countLowercase, countUppercase, countDigit, countSymbol;
int iLen=password.Length;
if (iLen <= 4)
Result = 5;
else if (iLen >= 5 && iLen <= 7)
Result = 10;
else if (iLen >= 8)
Result = 25;
countLowercase = 0;
countUppercase = 0;
countDigit = 0;
countSymbol = 0;
for (i = 0; i < iLen;i++)
{
char c= password[i];
if (c >= '0' && c <= '9')
countDigit++;
else if (c >= 'a' && c <= 'z')
countLowercase++;
else if (c >= 'A' && c <= 'Z')
countUppercase++;
else
countSymbol++;
}
//大小写
//0 分: 没有字母
//10 分: 全都是小(大)写字母
//20 分: 大小写混合字母
if (countLowercase == 0 && countUppercase == 0)
Result = Result + 0;
else if ((countLowercase == 0 && countUppercase > 0) || (countLowercase > 0 && countUppercase == 0))
Result = Result + 10;
else if (countLowercase >0 && countUppercase > 0)
Result = Result + 20;
// 计算数字得分
if (countDigit == 0)
Result = Result + 0;
else if (countDigit == 1)
Result = Result + 10;
else if (countDigit >= 3)
Result = Result + 20;
//符号评分
if (countSymbol == 0)
Result = Result + 0;
else if (countSymbol == 1)
Result = Result + 10;
else if (countSymbol > 1)
Result = Result + 25;
//五、奖励:
//2 分: 字母和数字
//3 分: 字母、数字和符号
//5 分: 大小写字母、数字和符号
if ((countLowercase > 0) && (countUppercase > 0) && (countDigit > 0) && (countSymbol == 0))
Result = Result + 2;
else if ((countLowercase > 0) && (countUppercase > 0) && (countDigit > 0) && (countSymbol > 0))
Result = Result + 5;
else if (((countLowercase > 0) || (countUppercase > 0)) & (countDigit > 0) && (countSymbol > 0))
Result = Result + 3;
return Result;
}
本文来自博客园作者:James-yu,转载请注明原文链接:https://www.cnblogs.com/james-yu/p/18251480
栏目列表
最新更新
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
Java使用poi生成word文档的简单实例
Elasticsearch term 查询之精确值搜索功能实
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比