统一社会信用代码验证

时间:2024-02-19 17:05:37

验证证件类型

正则表达式也是js里面的一个对象

创建一个正则表达式

可以这样创建一个:var reg2=new RegExp("abc");  //RegExp是正则对象的构造函数

也可以通过标记的形式创建:var reg1=/abc/;   //其中的\' // \'是标记,abc表示要匹配的字符

正则表达式匹配

复制代码
    var reg=/b/;        //匹配字符串中的b字符
    reg.test("abc");     
    //正则表达式的test用来检测字符串是否满足正则表达式的要求;
    //由于"abc"中存在b,所以是符合要求的,所以这段代码的返回值为:true

    const isTrue = reg.test("coke");   //由于"coke"中不存在b字符,所以不符合条件   -->isTrue:false


    var reg2=/abc/;     
    reg2.test("adbcd"); //字符串中必然存在"abc"才符合要求,所以这段代码的返回值为false

    reg2.test("1abc");      //true
    reg2.test("abc123");    //true
    reg2.test("abcabc");    //true
复制代码

正则表达式特殊字符

字符类别

. 表示除了换行符(\r \n)以外的任意字符

复制代码
    var reg=/./;
    reg.test("a");  //true
    reg.test(".");  //true
    reg.test("\r"); //false
    reg.test("1\r");    //存在一个1,不是换行符,所以结果为:true
    reg.test("\r\n");   //false

    //注意点:如果以后要匹配.字符,不要直接写.
    //为了匹配qq邮箱,写了 /qq.com/ 这是一个错误的写法:
    //=>/qq.com/不仅匹配:"qq.com"也匹配"qq1com" "qq@com"

    //解决方案:/qq\.com/  或者 /qq[.]com/
复制代码

\d 表示数字

复制代码
    var reg=/\d/;
    reg.test("1abc"); //由于存在一个数字,所以结果为true
    reg.test("abcde");  //由于不存在任何数字,所以结果为false

    //扩展:
    var _reg=/\d\d/;
    _reg.test("1b");    //不存在2个连续数字,所以结果为:false
    _reg.test("a12c");  //存在2个连续数字,结果为:true
复制代码

\D 是\d的取反结果,表示不是数字

复制代码
    var reg=/\D/;
    reg.test("123");   //由于全是数字,所以结果为:false
    reg.test("123a");  //存在一个字母,所以结果为:true

    var reg2=/123\D5/;
    reg2.test("12345"); //false
    reg2.test("123b5"); //true
复制代码

\w 匹配字母、数字、下划线 ,三者满足其一即可

复制代码
    var reg=/\w/;   
    reg.test("123");    //存在数字,结果为:true
    reg.test("a");  //true
    reg.test("1");  //true
    reg.test("_");  //true
    reg.test("-");  //false
    reg.test(".");  //false

    reg.test("1.");   //true
    reg.test("_\r");  //true
    reg.test("\r");   //false
复制代码

\W 是\w的取反

\s 表示一个空白字符(例如:\r \n \t 空格 。。。)

    var reg=/\s/;
    reg.test("abc def");   //存在一个空白,结果为:true
    reg.test("abc\r123");   //存在一个\r,结果为:true
    reg.test("abc");    //false

\S 是\s的取反

复制代码
    var reg=/\S/;
    reg.test(" \r \n ");   //全是空白字符,结果为false
    reg.test("123 abc");    //存在一个空白,结果为true


    var reg3=/\s\S/;
    reg3.test(" a");    //true
    reg3.test("a ");    //存在空白字符和非空白字符,但不符合正则的顺序,false
    reg3.test("a b");   //true
复制代码

\ 转义字符

    var reg=/\./;   //匹配.字符

    var reg=/\//;   //匹配一个正斜杠:/

字符集合

[ ]

复制代码
    var reg=/[1a2b3]/; //匹配这5个字符中的其中一个,只要满足其中,就是符合要求的
    reg.test("a");      //结果为:true
    reg.test("3");      //结果为:true
    reg.test("cd56789"); //一个符合要求的字符都不存在,结果为:false
    reg.test("a55555");    //结果为:true

    var reg2=/[123][abc]/;
    reg2.test("2a");    //true
    reg2.test("3c");    //true
    reg2.test("defgh1c");    //存在符合条件的1c,结果为:true
    reg2.test("39");    //不满足

    var reg2=/[0-9]/;   //匹配数字0-9之间,任何一个数字 等价于:/\d/
    var reg3=/[a-z]/;   //匹配小写字母
    var reg4=/[A-Z]/;   //匹配大写字母
    var reg5=/[a-zA-Z]/;//匹配所有字母
    var reg6=/[A-Za-z]/;//..........

    var reg10=/[0-9abc]/;
    reg10.test("3");//true
    reg10.test("five");//false
    reg10.test("banana");//true
复制代码

[^]

    var reg=/[^123]/;   //不是1 并且 不是2 并且 不是3 
    reg.test("a");      //true
    reg.test("3");      //false
    reg.test("123");    //没有1,2,3以外的字符,结果为:false

边界

^ 表示字符串最左边

$ 表示字符串最右边

复制代码
    var reg=/^abc/;     //表示以abc开头
    reg.test("123abc123");  //并不是以abc开头,结果为:false
    reg.test("abc123");     //以abc开头,结果为:true    

    var reg=/abc$/;     //表示以abc结尾
    reg.test("123abc"); //结果为:true
    reg.test("abc123"); //结果为:false

    var reg=/^abc$/;    //表示字符串abc
    reg.test("abc");    //结果为:true
    reg.test("123abc"); //结果为:false
复制代码

量词

* 出现0次或多次

复制代码
    var reg=/\d*/;
    reg.test("123");    //true
    reg.test("234");    //true
    reg.test("");    //true

    var reg3=/1\d*/;
    reg3.test("123");   //true
    reg3.test("a123")   //true
    reg3.test("a2b");   //false
复制代码

+ 出现1次或多次

? 出现0次或一次

{3} 出现3次

{3,} 至少出现3次

{3,5} 出现3-5次

    var reg=/abc{3}/;           //表示匹配abccc
    reg.test("123abccc123");    //结果为:true

| 或者

    var reg=/abc|123/;  //表示匹配abc或者123

() 分组

复制代码
    var reg=/(\d{3-4})-(\d{7,8})/;
    var arr="021-33335555".match(/(\d{3,4})-(\d{7,8})/); //这个方法是查找一个或多个正则表达式的匹配。
    arr[0]  //全部
    arr[1]  //021
    arr[2]  //333355555

    var reg=/(\d{3-4})-(\d{7,8})/;
    var str = "021-33335555";
    str.replace(/(\d{3,4})-(\d{7,8})/,\'$1\');    //这个方法是在字符串中查找匹配的子串, 并替换与正则表达式匹配的子串。
    //021 返回分组后\'$1\'对应的字符串替换正则匹配到的所有字符

    str.replace(/(\d{3,4})-(\d{7,8})/,\'$2\');    //33335555 返回分组后\'$2\'对应的字符串替换正则匹配到的所有字符
复制代码

案例:匹配邮箱(国内)

    var reg =/^1[3-9][0-9]\d{8}$/;

 

// 香港
protected function _checkIdCardHK($value)
{
  $regx = "/[A-Z]{1,2}[0-9]{6}([0-9A])/";
  if (preg_match($regx, $value)) {
    return true;
  }
  return false;
}
  // 澳门
protected function _checkIdCardMAC($value)
{
  $regx = "/^[1|5|7][0-9]{6}\([0-9Aa]\)/";
  if (preg_match($regx, $value)) {
    return true;
  }
  return false;
}
  // *
protected function _checkIdCardTW($value)
{
  $regx = "/[A-Z][0-9]{9}/";
  if (preg_match($regx, $value)) {
    return true;
  }
  return false;
}
  // 回乡证
protected function _checkReturnHome($value)
{
  $reg = "/(H|M)(\d{10})$/";
  if(preg_match($reg, $value))
  {
    return true;
  }
  return false;
}
  // 台胞证
protected function _checkId*($value)
{
  $reg = "/(^\d{8})$/";
  if(preg_match($reg, $value))
  {
    return true;
  }
  return false;
}
  // 护照
protected function _checkIdPassport($value)
{
  $reg = "/^1[45][0-9]{7}|([P|p|S|s]\d{7})|([S|s|G|g]\d{8})|([Gg|Tt|Ss|Ll|Qq|Dd|Aa|Ff]\d{8})|([H|h|M|m]\d{8,10})$/";
  if(preg_match($reg, $value))
  {
    return true;
  }
  return false;
}

js验证组织机构代码

 

1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成。

本体代码采用系列(即分区段)顺序编码方法。校验码按照以下公式计算:
C9=11-MOD(∑Ci(i=1→8)×Wi,11)
式中: MOD——代表求余函数;
i——代表代码字符从左至右位置序号;
Ci——代表第i位上的代码字符的值(具体代码字符见附表);
C9——代表校验码;
Wi——代表第i位上的加权因子;
当C9的值为10时,校验码应用大写的拉丁字母X表示;当C9的值为11时校验码用0表示。

2.代码的表示形式
为便于人工识别,应使用一个连字符“—”分隔本体代码与校验码。机读时,连字符省略。表示形式为:
xxxxxxxx—X

3.自定义区
为满足各系统管理上的特殊需要,规定本体代码PDY00001至PDY99999为自定义区,供各系统编制内部组织机构代码使用。自定义区内编制的组织机构代码不作为个系统之间信息交换的依据。

// 组织机构代码验证 true:真 false:假
function checkOrgCode(code) {
  var ws = [3, 7, 9, 10, 5, 8, 4, 2];
  var str = \'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\';
  var reg = /^([0-9A-Z]){8}-[0-9|X]$/;// /^[A-Za-z0-9]{8}-[A-Za-z0-9]{1}$/
  var sum = 0;
  for (var i = 0; i < 8; i++){
    sum += str.indexOf(code.charAt(i)) * ws[i];
  }
  var c9 = 11 - (sum % 11);
  ///c9 = c9 == 10 ? \'X\' : c9

  if (c9 == 11) { 
    c9 = \'0\'; 
  } else if (c9 == 10) { 
    c9 = \'X\' ;
  } else { 
    c9 = c9+\'\'; 
  } 
  alert(c9 +" -- "+ code.charAt(9));
  if (!reg.test(code) || c9 !== code.charAt(9)) {
    // alert("不是有效的组织机构代码!");
    return false;
  }else{
    return true;
  }
}

 

function CheckSocialCreditCode(Code) {
    var patrn = /^[0-9A-Z]+$/;
    //18位校验及大写校验  
    if ((Code.length != 18) || (patrn.test(Code) == false)) {
        return false;
    } else {
        var Ancode; //统一社会信用代码的每一个值  
        var Ancodevalue; //统一社会信用代码每一个值的权重   
        var total = 0;
        var weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]; //加权因子   
        var str = \'0123456789ABCDEFGHJKLMNPQRTUWXY\';
        //不用I、O、S、V、Z   
        for (var i = 0; i < Code.length - 1; i++) {
            Ancode = Code.substring(i, i + 1);
            Ancodevalue = str.indexOf(Ancode);
            total = total + Ancodevalue * weightedfactors[i];
            //权重与加权因子相乘之和   
        }
        var logiccheckcode = 31 - total % 31;
        if (logiccheckcode == 31) {
            logiccheckcode = 0;
        }
        var Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
        var Array_Str = Str.split(\',\');
        logiccheckcode = Array_Str[logiccheckcode];
        var checkcode = Code.substring(17, 18);
        if (logiccheckcode != checkcode) {
            return false;
        }
        return true;
    }
}
复制代码
 
  

/**
*验证营业执照是否合法:营业执照长度须为15位数字,前14位为顺序码,
*最后一位为根据GB/T 17710 1999(ISO 7064:1993)的混合系统校验位生成算法
*计算得出。此方法即是根据此算法来验证最后一位校验位是否政正确。如果
*最后一位校验位不正确,则认为此营业执照号不正确(不符合编码规则)。
*以下说明来自于网络:
*我国现行的营业执照上的注册号都是15位的,不存在13位的,从07年开始国
*家进行了全面的注册号升级就全部都是15位的了,如果你看见的是13位的注
*册号那肯定是假的。
*15位数字的含义,代码结构工商注册号由14位数字本体码和1位数字校验码
*组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。
* 一、前六位代表的是工商行政管理机关的代码,国家工商行政管理总局用
* “100000”表示,省级、地市级、区县级登记机关代码分别使用6位行
* 政区划代码表示。设立在经济技术开发区、高新技术开发区和保税区
* 的工商行政管理机关(县级或县级以上)或者各类专业*应由批准
* 设立的上级机关统一赋予工商行政管理机关代码,并报国家工商行政
* 管理总局信息化管理部门备案。
* 二、顺序码是7-14位,顺序码指工商行政管理机关在其管辖范围内按照先
* 后次序为申请登记注册的市场主体所分配的顺序号。为了便于管理和
* 赋码,8位顺序码中的第1位(自左至右)采用以下分配规则:
*   1)内资各类企业使用“0”、“1”、“2”、“3”;
*   2)外资企业使用“4”、“5”;
*   3)个体工商户使用“6”、“7”、“8”、“9”。
* 顺序码是系统根据企业性质情况自动生成的。
*三、校验码是最后一位,校验码用于检验本体码的正确性
*/
function isValidBusCode(busCode){
return true;
/*var ret=false;
if(busCode.length==15){
var sum=0;
var s=[];
var p=[];
var a=[];
var m=10;
p[0]=m;
for(var i=0;i<busCode.length;i++){
a[i]=parseInt(busCode.substring(i,i+1),m);
s[i]=(p[i]%(m+1))+a[i];
if(0==s[i]%m){
p[i+1]=10*2;
}else{
p[i+1]=(s[i]%m)*2;
}
}
if(1==(s[14]%m)){
//营业执照编号正确!
//alert(“营业执照编号正确!”);
ret=true;
}else{
//营业执照编号错误!
ret=false;
//alert(“营业执照编号错误!”);
}
}else if(“”==busCode){
ret=true;
}
return ret;*/
}

/**
*验证国税税务登记号是否合法:税务登记证是6位区域代码+组织机构代码
*/
function isValidTaxCode(taxCode){
var ret=true;
if(isValidOrgCode($(“#memberBase.eOrgCode”).val())){

}
return ret;
}

/**
*验证固定电话号码。固定电话号码格式为:区号-号码
*/
function isValidPhone(phone){
var ret=false;
if(“”==phone || (/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?/.test(phone))){
ret=true;
}
return ret;
}
 

 

1、验证电话号码或者手机号码

1
2
3
4
5
6
7
8
9
10
/**
 * 验证电话号码(手机号码+电话号码)
 * @param obj
 * @returns {Boolean}
 */
function checkPhoneNum(obj){
  if(/^((\d{3}-\d{8}|\d{4}-\d{7,8})|(1[3|5|7|8][0-9]{9}))$/.test(obj)){
    return true;
  }
}

2、验证地址(中文、英文、数字)

1
2
3
4
5
6
7
8
9
/**
 * 验证企业地址(中文、英文、数字)
 * @param obj
 */
function checkAddress(obj){
  if(/^[\u4e00-\u9fa5a-zA-Z0-9]+$/.test(obj)){
    return true;
  }
}

3、验证用户名

1
2
3
4
5
6
7
8
9
10
/**
 * 验证用户名输入格式
 * @param obj
 * @returns {Boolean}
 */
function checkUserName(obj){
  if(/^[a-zA-Z0-9_-]{3,16}$/.test(obj)){
    return true;
  }
}

4、验证密码

1
2
3
4
5
6
7
8
9
10
/**
 * 验证密码输入格式
 * @param obj
 * @returns {Boolean}
 */
function verifyPassword(obj){
  if(/^[a-z0-9_-]{5,18}$/.test(obj)){
    return true;
  }
}

5、验证企业税号

1
2
3
4
5
6
7
8
9
10
11
/**
 * 验证税号
 * 15或者17或者18或者20位字母、数字组成
 * @param obj
 * @returns {Boolean}
 */
function checkTax(obj){
  if(/^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/.test(obj)){
    return true;
  }
}

6、验证金额

1
2
3
4
5
6
7
8
9
10
/**
 * 验证金额(可验证 大于等于零,小于等于99999999.99 的数字)
 * @param obj
 * @returns {Boolean}
 */
function checkMoney(obj){
  if(/^([1-9][\d]{0,7}|0)(\.[\d]{1,2})?$/.test(obj)){
    return true;
  }
}

7、验证身份证号,包括大陆身份证号,和港澳台身份证号,当然这里都只是简单的规范一下,实际的像香港的身份证号最后的括号里面的校验位都是需要根据前面的

数字依据一定的加权算法算出来进行校验的,这里没有涉及到。如果需要特别精确则可以去研究一番。

 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
 * 验证大陆的身份证号
 * 验证身份证号
 * 身份证号码为15位或18位的全数字,或者18位时前17位是数字,最后一位是校验位,可能是数字或字符X或x
 * @param obj
 */
function checkIdCard(obj){
  if(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(obj)){
    return true;
  }
}
/**
 * 验证港澳台身份证
 * @param obj
 */
function checkGATIdCard(obj){
  var reg1 = /^[A-Z]{1,2}[0-9]{6}[\(|\(]?[0-9A-Z][\)|\)]?$/;//香港格式1 (香港身份证号码结构:XYabcdef(z))
  var reg2 = /^[A-Z][0-9]{8,12}$/;//香港格式2 (H60152555)
  var reg3 = /^[1|5|7][0-9]{6}[\(|\(]?[0-9A-Z][\)|\)]?$/;//澳门,8位数,不包含出生年月 格式为 xxxxxxx(x) 注:x全为数字,无英文字母 首位数只有1、5、7字开头的
  var reg4 = /^[a-zA-Z][0-9]{9}$/;//*:10位字母和数字
  if(reg1.test(obj) || reg2.test(obj) || reg3.test(obj) || reg4.test(obj)){
    return true;
  }
}
 
 
 
 

1.邮箱格式判断

function isEmailAddress(obj) {
var pattern = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,5}$/;
flag = pattern.test(obj);
return flag;
}
1
2
3
4
5
2.校验统一社会信用编码

function CheckSocialCreditCodeOrg(Code) {
var patrn = /^[0-9A-Z]+$/;
//18位校验及大写校验
if ((Code.length != 18) || (patrn.test(Code) == false))
{
return false;
}
else
{
var Ancode;//信用代码/税号的每一个值
var Ancodevalue;//信用代码/税号每一个值的权重
var total = 0;
var weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];//加权因子
var str = \'0123456789ABCDEFGHJKLMNPQRTUWXY\';
//不用I、O、S、V、Z
for (var i = 0; i < Code.length - 1; i++)
{
Ancode = Code.substring(i, i + 1);
Ancodevalue = str.indexOf(Ancode);
total = total + Ancodevalue * weightedfactors[i];
//权重与加权因子相乘之和
}
var logiccheckcode = 31 - total % 31;
if (logiccheckcode == 31)
{
logiccheckcode = 0;
}
var Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
var Array_Str = Str.split(\',\');
logiccheckcode = Array_Str[logiccheckcode];


var checkcode = Code.substring(17, 18);
if (logiccheckcode != checkcode)
{
return false;
// alert("不是有效的统一社会信用编码!");
}else{
return true;
}
}
}

3.校验个体工商户验证码
/**
*验证营业执照是否合法:营业执照长度须为15位数字,前14位为顺序码,
*最后一位为根据GB/T 17710 1999(ISO 7064:1993)的混合系统校验位生成算法
*计算得出。此方法即是根据此算法来验证最后一位校验位是否政正确。如果
*最后一位校验位不正确,则认为此营业执照号不正确(不符合编码规则)。
*以下说明来自于网络:
*我国现行的营业执照上的注册号都是15位的,不存在13位的,从07年开始国
*家进行了全面的注册号升级就全部都是15位的了,如果你看见的是13位的注
*册号那肯定是假的。
*15位数字的含义,代码结构工商注册号由14位数字本体码和1位数字校验码
*组成,其中本体码从左至右依次为:6位首次登记机关码、8位顺序码。
* 一、前六位代表的是工商行政管理机关的代码,国家工商行政管理总局用
* “100000”表示,省级、地市级、区县级登记机关代码分别使用6位行
* 政区划代码表示。设立在经济技术开发区、高新技术开发区和保税区
* 的工商行政管理机关(县级或县级以上)或者各类专业*应由批准
* 设立的上级机关统一赋予工商行政管理机关代码,并报国家工商行政
* 管理总局信息化管理部门备案。
* 二、顺序码是7-14位,顺序码指工商行政管理机关在其管辖范围内按照先
* 后次序为申请登记注册的市场主体所分配的顺序号。为了便于管理和
* 赋码,8位顺序码中的第1位(自左至右)采用以下分配规则:
*   1)内资各类企业使用“0”、“1”、“2”、“3”;
*   2)外资企业使用“4”、“5”;
*   3)个体工商户使用“6”、“7”、“8”、“9”。
* 顺序码是系统根据企业性质情况自动生成的。
*三、校验码是最后一位,校验码用于检验本体码的正确性
*/

function isValidBusCode(busCode){
var ret=false;
if(busCode.length===15){//15位
var sum=0;
var s=[];
var p=[];
var a=[];
var m=10;
p[0]=m;
for(var i=0;i<busCode.length;i++){
a[i]=parseInt(busCode.substring(i,i+1),m);
s[i]=(p[i]%(m+1))+a[i];
if(0==s[i]%m){
p[i+1]=10*2;
}else{
p[i+1]=(s[i]%m)*2;
}
}
if(1==(s[14]%m)){//营业执照编号正确!
ret=true;
}else{//营业执照编号错误!
ret=false;
}
}else{//营业执照格式不对,必须是15位数的!
ret=false;
}
return ret;
}

4.纳税人识别号验证
/*
* 纳税人识别号验证
* 15位包括地区编码6位+组织机构代码9位
*/

function checkTaxpayerId(taxpayerId){
if(taxpayerId!="" && taxpayerId.length===15){
var addressCode = taxpayerId.substring(0,6);
// 校验地址码
var check = checkAddressCode(addressCode);
if(!check){
return false;
}
// 校验组织机构代码
var orgCode = taxpayerId.substring(6,9);
check = isValidOrgCode(orgCode);
if(!check){
return false;
}
return true;
}else{
return false;
}
}

/*
*校验地址码
*/

function checkAddressCode(addressCode){
var provinceAndCitys={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",
31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",
45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"*",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",
65:"*",71:"*",81:"香港",82:"澳门",91:"国外"};
var check = /^[1-9]\d{5}$/.test(addressCode);
if(!check) return false;
if(provinceAndCitys[parseInt(addressCode.substring(0,2))]){
return true;
}else{
return false;
}

}