参考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;

    }

`

posted @ 2024-06-16 23:21 James-yu 阅读(196) 评论(0) 推荐(2) 编辑
摘要: 想把公司的数据库转到MySQL,所以想装个MySQL测试,发现新版的MySQL(8.0.34)默认安装还是有不少问题, #### 一、譬如表、字段大小写的问题: > lower_case_table_names=0 -- 表名存储为给定的大小和比较是区分大小写的 (linux 默认) lower_c 阅读全文
posted @ 2023-08-20 15:06 James-yu 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 很久以前用DevExtreme写的一个Hybird APP要添加蓝牙打印功能,但是用来打包APP的phonegap被adobe关闭了,所以,只能自己用cordova去打包安卓APP,不得已,研究了一下安卓原生开发。 以前用phonegap打包很方便,在visual studio里面一键完成,现在自己 阅读全文
posted @ 2022-10-03 20:59 James-yu 阅读(985) 评论(0) 推荐(3) 编辑
摘要: 佳能太无耻,为了销售CP910 , CP900 到win8 ,win8.1,win 10 都没有驱动程序,网上找的方法都不行,IT民工自有办法, 仔细研究发现,应该是驱动没有win10签名的问题,那么就先把win10 强制签名去掉,果然成功了! 点击“阅读全文”,图文并茂解释,我是一个好人,哈哈 阅读全文
posted @ 2016-11-17 22:26 James-yu 阅读(10870) 评论(1) 推荐(0) 编辑
摘要: 博客园有篇文章《小巧方便的ORM类库——PetaPoco》 介绍了PetaPoco调用存储过程://调用存储过程db.Execute("exec procSomeHandler @0, @1", 3, "2011-10-01");//调用带输出(OUTPUT)参数的存储过程, 写的sql语句,@0参数后的“output”是关键var param = new SqlParameter() { Direction = ParameterDirection.Output, SqlDbType = SqlDbType.Int };db.Execute(" 阅读全文
posted @ 2013-08-25 13:55 James-yu 阅读(4257) 评论(3) 推荐(2) 编辑
摘要: 一、在官网上下载X64版本的,正常安装,我选择的是APPLICATION 模式(比较烦服务方式,反正是测试用,正式使用还是建议服务方式,不会出现第2步的问题。二、安装后,运行是要点击右键,选择以管理员身份运行,否则会出现:cannot attach to password database 的错误 。(开始怎么也连接不到数据库,后来才发现是权限问题)三、我是用工具FlameRobin连接,注意 SYSDBA 密码 masterkey (或masterke)四、创建用户 (firebird 的用户密码,SYSDBA可以随便更改,但是不能获得,保存的是加密加SHA后的结果)五、使用这个用户,创建D 阅读全文
posted @ 2012-12-06 01:45 James-yu 阅读(1684) 评论(0) 推荐(0) 编辑
摘要: 服务器选项卡: 一.创建表空间: 服务器->表空间 yu_test 二.创建用户:(ORACLE 的 方案( schema ) 是和用户绑定,自动产生) 1.指定用户名/密码/默认的表空间 2.权限:一般给用户赋予角色:connect 及 resource ,不讲究可以给DBA 3.限额里面: 默认表空间,可以选“无限” 三、用 Oracle SQL Developer 连接数据库,用VS 2010 连接 建表测试,ok! ———————————— SQL server 一般都习惯用sa 作为程序的用户,而oracle默认的sys是没有表权限的。 SQL SERVER 用户... 阅读全文
posted @ 2012-10-06 00:41 James-yu 阅读(1521) 评论(0) 推荐(0) 编辑
摘要: 标准流程,参考: http://www.cnblogs.com/wang_yb/archive/2011/07/11/2103368.html1.安装client2. 环境变量的设置设置Windows的环境变量:(我的电脑,右键,属性)ORACLE_HOME :ODAC的安装目录(类似 ~\app\Administrator\product\11.1.0\client_1)LD_LIBRARY_PATH :%ORACLE_HOME%TNS_ADMIN : :%ORACLE_HOME%3. 监听文件tnsnames.ora的配置, orcale 不像SQL那样可以自动找到服务器在目录%ORAC. 阅读全文
posted @ 2012-10-05 22:27 James-yu 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 今年海关开始推行舱单系统,要求船代传输的箱单数据必须与货代的一致,由于集装箱代码使用ISO95代码,与一般习惯用代码并不一致,造成很大数据匹配问题,不能正常申报。譬如: 45G1 46G1 都是40尺干货高箱,怎么选择代码? 22G1 22G0 都是20尺干货箱,怎么选择?经过仔细研究ISO95标准文件,他们之间的区别是:45G1 46G1 都是40尺干货高箱,区别在与箱高有微小差距,45是标准高度2895mm,46是高于2895mm22G1 22G0 都是20尺干货箱,区别是排气口的位置,G0是开在下面,G1是开在上部。我想这个应该都是集装箱的属性,根据箱高、排气口(通风口)位置每个箱子都有 阅读全文
posted @ 2011-09-03 10:35 James-yu 阅读(1601) 评论(0) 推荐(0) 编辑
摘要: 今天写一段收集不同币别列表的小程序,其实就是一小段循环程序,没有想到执行结果和预期完全不一样!下面的程序根本不能得到正确的结果,按照一般理解,for 循环执行后,iCnt应该等于iCurrCount(除非被中断),可实际上iCnt永远不会等于iCurrCount,苦思不得其解,循环执行后iCnt的值是个完全不相干的数字(如-2),彻底晕倒procedure TForm1.Button1Click(... 阅读全文
posted @ 2010-09-07 21:45 James-yu 阅读(7071) 评论(0) 推荐(1) 编辑
点击右上角即可分享
微信分享提示