`
kkvsyy
  • 浏览: 30132 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

银行卡号的校验[JAVA]和身份证件号码校验[JAVASCRIPT]

阅读更多

关于上一节中的问题:银行卡号的校验我在网上找到一个简单的算法

  /**
	     * 校验银行卡卡号
	     * @param cardId
	     * @return
	     */
	    public static boolean checkBankCard(String cardId) {
	    		 char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
	    		 if(bit == 'N'){
	    			 return false;
	    		 }
	    		 return cardId.charAt(cardId.length() - 1) == bit;
	    }
	   
	    /**
	     * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
	     * @param nonCheckCodeCardId
	     * @return
	     */
	    public static char getBankCardCheckCode(String nonCheckCodeCardId){
	        if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0
	                || !nonCheckCodeCardId.matches("\\d+")) {
	        	//如果传的不是数据返回N
	            return 'N';
	        }
	        char[] chs = nonCheckCodeCardId.trim().toCharArray();
	        int luhmSum = 0;
	        for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
	            int k = chs[i] - '0';
	            if(j % 2 == 0) {
	                k *= 2;
	                k = k / 10 + k % 10;
	            }
	            luhmSum += k;           
	        }
	        return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0');
	    }

 关于身份证件号码的校验,比较严格的控制

	/**
	 * author:qiaoyongjun
	 * StrNo:用户输入的身份证件号码
	 * _id:用来承载错误信息的控件ID号,用来进行友好提示
	 *判断身份证号码格式函数
	 *公民身份号码是特征组合码,
	 *排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码
	 *如果验证通过 返回 true
	 */
	function isChinaIDCard(StrNo, _Id) {
		var error = document.getElementById(_Id);
		StrNo = StrNo.toString();
		if (StrNo.length == 15) {
			if (!isValidDate("19" + StrNo.substr(6, 2), StrNo.substr(8, 2),
					StrNo.substr(10, 2), _Id)) {
				return false;
			}
		} else if (StrNo.length == 18) {
			if (!isValidDate(StrNo.substr(6, 4), StrNo.substr(10, 2), StrNo
					.substr(12, 2), _Id)) {
				return false;
			}
		} else {
			error.innerHTML = "";
			error.innerHTML = "输入的身份证号码必须为15位或者18位!";
			return false;
		}

		if (StrNo.length == 18) {
			var a, b, c
			if (!isNumber(StrNo.substr(0, 17))) {

				error.innerHTML = "";
				error.innerHTML = "身份证号码错误,前17位不能含有英文字母!";
				return false;

			}
			a = parseInt(StrNo.substr(0, 1)) * 7 + parseInt(StrNo.substr(1, 1))
					* 9 + parseInt(StrNo.substr(2, 1)) * 10;
			a = a + parseInt(StrNo.substr(3, 1)) * 5
					+ parseInt(StrNo.substr(4, 1)) * 8
					+ parseInt(StrNo.substr(5, 1)) * 4;
			a = a + parseInt(StrNo.substr(6, 1)) * 2
					+ parseInt(StrNo.substr(7, 1)) * 1
					+ parseInt(StrNo.substr(8, 1)) * 6;
			a = a + parseInt(StrNo.substr(9, 1)) * 3
					+ parseInt(StrNo.substr(10, 1)) * 7
					+ parseInt(StrNo.substr(11, 1)) * 9;
			a = a + parseInt(StrNo.substr(12, 1)) * 10
					+ parseInt(StrNo.substr(13, 1)) * 5
					+ parseInt(StrNo.substr(14, 1)) * 8;
			a = a + parseInt(StrNo.substr(15, 1)) * 4
					+ parseInt(StrNo.substr(16, 1)) * 2;
			b = a % 11;
			if (b == 2) //最后一位为校验位  
			{
				c = StrNo.substr(17, 1).toUpperCase(); //转为大写X  
			} else {
				c = parseInt(StrNo.substr(17, 1));
			}
			switch (b) {
			case 0:
				if (c != 1) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:1";
					return false;
				}
				break;
			case 1:
				if (c != 0) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:0";
					return false;
				}
				break;
			case 2:
				if (c != "X") {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:X";
					return false;
				}
				break;
			case 3:
				if (c != 9) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:9";
					return false;
				}
				break;
			case 4:
				if (c != 8) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:8";
					return false;
				}
				break;
			case 5:
				if (c != 7) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:7";
					return false;
				}
				break;
			case 6:
				if (c != 6) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:6";
					return false;
				}
				break;
			case 7:
				if (c != 5) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:5";
					return false;
				}
				break;
			case 8:
				if (c != 4) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:4";
					return false;
				}
				break;
			case 9:
				if (c != 3) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:3";
					return false;
				}
				break;
			case 10:
				if (c != 2) {
					error.innerHTML = "";
					error.innerHTML = "身份证号码校验位错:最后一位应该为:2";
					return false;
				}
			}
		} else {//15位身份证号  
			if (!isNumber(StrNo)) {
				error.innerHTML = "";
				error.innerHTML = "身份证号码错误,前15位不能含有英文字母!";
				return false;
			}
		}
		return true;

	}
	/**
	 * 验证身份证件中的日期是否合法有效
	 * @param iY
	 * @param iM
	 * @param iD
	 * @param _id
	 * @return
	 */
	function isValidDate(iY, iM, iD, _id) {
		if (iY > 2200 || iY < 1900 || !isNumber(iY)) {
			document.getElementById(_id).innerHTML = "";
			document.getElementById(_id).innerHTML = "输入身份证号,年度" + iY + "非法!";
			return false;
		}
		if (iM > 12 || iM <= 0 || !isNumber(iM)) {
			document.getElementById(_id).innerHTML = "";
			document.getElementById(_id).innerHTML = "输入身份证号,月份" + iM + "非法!";
			return false;
		}
		if (iD > 31 || iD <= 0 || !isNumber(iD)) {
			document.getElementById(_id).innerHTML = "";
			document.getElementById(_id).innerHTML = "输入身份证号,日期" + iD + "非法!";
			return false;
		}
		return true;
	}
	/**
	 * 验证是否为数字
	 * @param oNum
	 * @return
	 */
	function isNumber(oNum) {
		if (!oNum)
			return false;
		var strP = /^\d+(\.\d+)?$/;
		if (!strP.test(oNum))
			return false;
		try {
			if (parseFloat(oNum) != oNum)
				return false;
		} catch (ex) {
			return false;
		}
		return true;
	}

 注:关于银行卡号的校验 有什么更好的方法 请提出来 供大家研究 谢谢

分享到:
评论
1 楼 piaoxue_x 2011-08-03  
嗯,好,不错,谢谢了!!!

相关推荐

    银行卡号校验

    为了确保银行卡号的准确性和安全性,进行银行卡号校验是非常必要的步骤。其中,Luhn算法(也称为模10算法或Luhn校验算法)是一种广泛应用的校验方法,它能有效地检测出大部分错误输入的银行卡号。 Luhn算法的基本...

    银行卡号正则校验js工具类

    银行卡号正则校验js工具类

    JAVA身份证号码校验类

    针对身份证号码的校验,以及能自动将身份证从15位升级为18位

    java根据卡号识别银行

    7. **数据处理**:处理银行卡号信息时,可能需要对输入进行校验,例如检查卡号长度、格式和合法性。此外,可能会使用哈希或映射数据结构来优化BIN查询性能。 8. **异常处理**:在处理银行卡号识别时,应考虑处理找...

    Excel 身份证号码校验 年龄 性别提取 银行卡数字校验

    身份证和银行卡号码的最后一位都是用前面的数字计算而来的校验码,所以可以在一定程度上减少误输入的可能。 此文件包含身份证、19位银行卡号码校验,年龄提取,性别提取的公式。 使用方式,非常简单,打开此文件,...

    JAVA验证身份证号码校验码是否正确.zip

    总结来说,Java验证身份证号码校验码是否正确的关键是理解身份证号码的构成规则和校验码的计算方法,然后编写相应的代码进行逻辑判断。通过上述方法,我们可以在Java程序中实现对身份证号码的准确验证,确保处理个人...

    java 银行卡 验证 正则表达式使用

    在"java 银行卡 验证 正则表达式使用"这个主题中,我们将深入探讨如何利用正则表达式进行银行卡、手机号码和邮箱以及URL地址的有效性验证。下面将详细介绍这些知识点。 首先,银行卡验证。银行卡号通常由一系列数字...

    判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)

    银行卡号校验是金融系统中常见的一项功能,它能够确保用户输入的卡号是符合标准格式并且在一定程度上能识别出错误输入或伪造卡号。本篇内容主要介绍了如何使用Luhn算法来进行银行卡号的校验。Luhn算法是由IBM科学家...

    这个是银行卡校验的工具类,所有银行都可以校验

    这个是银行卡校验的工具类,所有银行都可以校验。

    车架号校验Java工具类

    车架号校验工具类,Java实现代码。通过目前主流的车架号校验规则进行校验。提供车架号校验,以及虚拟车架号生成。车架号生成仅供测试,请勿做他用

    js校验身份证号和银行卡号

    在JavaScript(简称js)编程中,验证身份证号和银行卡号是非常常见的需求,特别是在网页表单提交或者用户注册等场景。身份证号码验证确保了输入的有效性,防止非法或错误的输入,而银行卡号验证则可以保护用户的金融...

    输入银行卡号进行校验

    校验输入的银行卡正确

    Java身份证号码合法性校验算法,正则表达式。

    最完善的身份证号码合法性校验Java算法,适合Android平台,可以直接拿来在项目中使用,正则表达式。

    【原创】纯javascript实现银行卡号的Luhm验证或校验算法

    在IT行业中,尤其是在支付系统和金融服务领域,银行卡号的有效性验证是至关重要的。这个验证过程主要确保用户输入的银行卡号是正确的,以防止错误的数据处理和潜在的安全风险。本篇文章将详细探讨一种常用的验证方法...

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验

    Java居民身份证号校验规则

    Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!

    java写的身份证号码校验类

    2. **加权因子与校验码映射**:在代码中定义了两个数组`iW`和`szVerCode`,分别用于存储加权因子和校验码的映射关系。 3. **主方法**:通过调用`doVerify`方法并传入一个身份证号码字符串,可以验证该号码的最后一...

    js验证银行卡号

    这段代码首先将银行卡号分解为前15或18位和最后一位校验位,然后分别处理奇数位和偶数位,对于奇数位,如果是偶数则直接相加,如果是大于9的数则分解为个位和十位相加,最后将所有处理过的数字相加,计算总和,并...

    java校验和算法

    由于需要和蓝牙通讯,协议需要用到校验和,找了很久才找到,给大家共享。java校验和算法绝对可以用。

    使用Java正则表达式实现一个简单的身份证号码验证

    ### 使用Java正则表达式实现一个简单的身份证号码验证 #### 一、背景介绍 身份证号码是中国公民的身份标识,由15位或18位数字组成(早期为15位,后改为18位)。其中,第18位是校验码,可能是数字0~9或者大写字母X。...

Global site tag (gtag.js) - Google Analytics