转自:http://kkvsyy.iteye.com/blog/1125105
关于上一节中的问题:银行卡号的校验我在网上找到一个简单的算法
-
-
-
-
-
-
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;
-
}
-
-
-
-
-
-
-
public
static
char
getBankCardCheckCode(String nonCheckCodeCardId){
-
if
(nonCheckCodeCardId ==
null
|| nonCheckCodeCardId.trim().length() ==
0
-
|| !nonCheckCodeCardId.matches("\\d+"
)) {
-
-
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'
);
-
}
关于身份证件号码的校验,比较严格的控制
-
-
-
-
-
-
-
-
-
-
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();
-
} 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
{
-
if
(!isNumber(StrNo)) {
-
error.innerHTML = ""
;
-
error.innerHTML = "身份证号码错误,前15位不能含有英文字母!"
;
-
return
false
;
-
}
-
}
-
return
true
;
-
-
}
-
-
-
-
-
-
-
-
-
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
;
-
}
-
-
-
-
-
-
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
;
-
}
注:关于银行卡号的校验 有什么更好的方法 请提出来 供大家研究 谢谢
分享到:
相关推荐
在JavaScript(简称js)编程中,验证身份证号和银行卡号是非常常见的需求,特别是在网页表单提交或者用户注册等场景。身份证号码验证确保了输入的有效性,防止非法或错误的输入,而银行卡号验证则可以保护用户的金融...
"Android-BankCardUtils"就是一个这样的工具类,它专注于自动格式化和验证银行卡号、手机号和身份证号。下面将详细讲解这个工具类的主要功能和实现原理。 首先,BankCardUtils的核心功能是根据银行卡号识别出对应的...
总之,OCR技术在自动识别身份证、银行卡号和卡片文字方面的应用,极大地提高了工作效率,减少了人为错误,为现代信息化社会提供了强大的支持。通过理解并掌握这种技术,开发者可以构建出更加智能和便捷的解决方案。
身份证验证涉及到更复杂的校验规则,包括地区代码、出生日期、顺序号和校验码等。以下是一个简单的18位身份证号码验证函数: ```javascript function validateIdCard(id) { const idRegex = /(^\d{15}$)|(^\d{18}$...
总之,银行卡号识别是一个涉及图像处理、计算机视觉和OCR技术的综合应用,通过OpenCV和Tesseract的合理组合,可以实现高效且准确的自动识别。在实际项目中,根据具体需求,可能还需要考虑到性能优化、多线程处理、...
项目可能实现了对银行卡号、发卡行等关键信息的自动提取,并通过某种算法或API验证这些信息的有效性。 身份证识别则更为复杂,涉及到个人信息的隐私保护和合规性。在本地实现身份证识别,开发者可能使用了Tesseract...
对于身份证和银行卡扫描,我们需要识别的主要是姓名、证件号、有效期等关键字段。 在iOS中,我们可以使用Apple的Vision框架来实现OCR功能。Vision框架提供了强大的计算机视觉功能,包括文本检测、人脸识别等。具体...
其中,华旭验证读卡软件是一款专门为身份证信息读取和验证设计的专业级应用软件,旨在为政府机关、金融系统、酒店管理等诸多行业提供高效、安全的身份证信息处理方案。本文将深入探讨这款软件的功能、特点以及在实际...
这个“适用于深度学习的银行卡数据集”正提供了一个宝贵的资源,用于训练和优化深度学习模型来识别银行卡。以下将详细介绍该数据集及其在深度学习中的应用。 首先,银行卡数据集包含2000张已标注的图片,这意味着每...
在Android开发中,实现指定区域拍照、身份证拍照和银行卡拍照是一项常见的需求,主要应用于实名认证、支付验证等场景。为了实现这样的功能,开发者需要掌握以下几个关键知识点: 1. **权限申请**: 在Android系统...
在这个名为"ios-Swift UITextField封装,电话号码,身份证,银行卡号,密码输入框.zip"的项目中,开发者对UITextField进行了封装,以适应特定的输入场景,如电话号码、身份证号、银行卡号以及密码输入。下面将详细介绍这...
1. 金融服务:银行、支付平台等金融机构在开户、交易验证时需要用到身份证验证。 2. 电信运营商:办理手机卡、宽带业务时,需要实名制验证。 3. 住宿登记:酒店入住时,需要验证住客的身份信息。 4. 网络社交:网络...
在IT行业中,数据验证是确保数据质量和安全的重要环节。针对给定的标题和描述,我们可以深入探讨...在实际开发中,还可以进一步扩展这些方法,增加更多的验证规则,如邮箱验证、银行卡号验证等,以满足更复杂的需求。
客户在办理银行卡时,需要携带身份证,并进行身份验证,设置取款密码,完成所有步骤后,会得到一张银行卡。如果同时办理网上银行业务,还会得到一张密保卡或者一个 U 盾。同时,银监会规定了银行卡办理的年龄限制和...
- 如果应用涉及到用户的敏感信息,如身份证号、银行卡号,需按照法律法规要求进行存储和传输,保障用户数据的安全。 8. **BaiduOCRDemo-master** - 这个文件名可能是示例项目的名称,里面可能包含了完整的代码...
在互联网实名制、手机卡实名制等政策实施过程中,通过核对身份证号码前6位,可以有效地对个人身份进行验证,确保网络安全和信息真实。同时,在涉及到国家秘密和关键信息基础设施的领域,对于身份证号码前6位地区的...
本资源包“JS input正则验证大全”主要聚焦于使用JavaScript进行输入框(input)的各种类型的数据验证,包括英文、中文、邮箱、手机号、银行卡和身份证等常见字段的正则校验规则。以下是对这些知识点的详细说明: 1...
这些设备都是专门用于读取和验证身份证信息的专用硬件,通常用于公共服务场所如火车站、机场、酒店、银行等,用于快速验证个人身份。 2. **新中新WebAPI读卡接口说明**: “新中新webapi读卡接口说明.docx”文档很...
4. **银行卡三元素核验**:除了银行卡号和持卡人姓名,还增加了验证码或持卡人身份证号码的验证,提高了验证的安全级别。 5. **银行卡四元素核验**:在三元素的基础上,进一步增加了银行预留手机号码的验证,确保...