JS要来自动判断密码的安全强度

本文介绍了一个使用JavaScript实现的密码强度检测工具。该工具可以根据密码中包含的不同类型字符(数字、大小写字母、特殊字符)的数量来评估密码的强度,并通过不同颜色的指示条直观展示密码强度等级。

先看效果

 

代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>用于判断密码的安全强度</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript">

	//CharMode函数 
	//测试某个字符是属于哪一类. 
	function CharMode(iN){ 
		if (iN>=48 && iN <=57) //数字 
		return 1; 
		if (iN>=65 && iN <=90) //大写字母 
		return 2; 
		if (iN>=97 && iN <=122) //小写 
		return 4; 
		else 
		return 8; //特殊字符 
	} 

	//bitTotal函数 
	//计算出当前密码当中一共有多少种模式 
	function bitTotal(num){ 
		modes=0; 
		for (i=0;i<4;i++){ 
		if (num & 1) modes++; 
		num>>>=1; 
		} 
		return modes; 
	} 

	//checkStrong函数 
	//返回密码的强度级别 

	function checkStrong(sPW){ 
		if (sPW.length<=4) 
		return 0; //密码太短 
		Modes=0; 
		for (i=0;i<sPW.length;i++){ 
		//测试每一个字符的类别并统计一共有多少种模式. 
		Modes|=CharMode(sPW.charCodeAt(i)); 
		} 
	
		return bitTotal(Modes); 
	} 

	//pwStrength函数 
	//当用户放开键盘或密码输入框失去焦点时,根据不同的级别显示不同的颜色 

	function pwStrength(pwd){ 
		O_color="#eeeeee"; 
		L_color="#FF4040"; 
		M_color="#FF9900"; 
		H_color="#33CC00"; 
		if (pwd==null||pwd==''){ 
		Lcolor=Mcolor=Hcolor=O_color; 
		} 
		else{ 
			S_level=checkStrong(pwd); 
			switch(S_level) { 
			case 0: 
			Lcolor=Mcolor=Hcolor=O_color; 
			case 1: 
			Lcolor=L_color; 
			Mcolor=Hcolor=O_color; 
			break; 
			case 2: 
			Lcolor=Mcolor=M_color; 
			Hcolor=O_color; 
			break; 
			default: 
			Lcolor=Mcolor=Hcolor=H_color; 
			} 
		} 

		document.getElementById("strength_L").style.background=Lcolor; 
		document.getElementById("strength_M").style.background=Mcolor; 
		document.getElementById("strength_H").style.background=Hcolor; 
		return; 
	} 	
	
	</script>

  </head>
  
  <body>
   	<table>
   		<tr id ="tr_Password2">
          <td height="30" align="right" >密码:</td>
          <td>
          <input type="password" name="password" class="input1" onKeyUp="pwStrength(this.value)" onBlur="pwStrength(this.value)">
          <font color="red">*</font>
          </td>
        </tr>
        <tr id ="tr_ConfirmPassword2">
          <td height="30" align="right" >确认密码:</td>
          <td><input type="password" name="passCf" class="input1">
          <font color="red">*</font>
          </td>
        </tr>
        <tr>
        	<td align="right">密码强度:</td>
        	<td>
				<table  border="1" cellspacing="0" cellpadding="1" height="20" style="border-color: #5b5b5b;"> 
				<tr align="center" bgcolor="#eeeeee"> 
					<td width="33%" id="strength_L">弱</td> 
					<td width="33%" id="strength_M">中</td> 
					<td width="33%" id="strength_H">安全</td> 
				</tr> 
				</table>        	
        	</td>
        </tr> 
   	</table>
  </body>
</html>
 
下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值