// 统一社会信用代码
checkSocialCardNumber(value) {
if (value == "") {
return false;
} else {
var firstarray = [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
];
var firstkeys = [3, 7, 9, 10, 5, 8, 4, 2];
var secondarray = [
"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 secondkeys = [
1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28,
];
function calc(code, array1, array2, b) {
var count = 0;
for (var i = 0; i < array2.length; i++) {
var a = code[i];
count += array2[i] * array1.indexOf(a);
}
var remainder = count % b;
return remainder === 0 ? 0 : b - remainder;
}
var code = value.toUpperCase();
if (code.length != 18) {
console.log(1);
return false;
}
var reg = /^\w\w\d{6}\w{9}\w$/;
if (!reg.test(code)) {
console.log(2);
return false;
} else {
/*
登记管理部门代码:使用阿拉伯数字或大写英文字母表示。
机构编制:1
民政:5
工商:9
其他:Y
*/
let reg1 = /^[1,5,9,Y]\w\d{6}\w{9}\w$/;
if (!reg1.test(code)) {
console.log(3);
return false;
} else {
/*
机构类别代码:使用阿拉伯数字或大写英文字母表示。
机构编制机关:11打头
机构编制事业单位:12打头
机构编制中央编办直接管理机构编制的群众团体:13打头
机构编制其他:19打头
民政社会团体:51打头
民政民办非企业单位:52打头
民政基金会:53打头
村民委员会:54打头
民政其他:59打头
工商企业:91打头
工商个体工商户:92打头
工商农民专业合作社:93打头
其他:Y1打头
*/
let reg2 = /^(11|12|13|19|21|31|32|33|34|35|41|51|52|53|54|55|61|62|59|71|72|81|91|92|93|A1|G1|J1|N1|N2|N3|Y1)\d{6}\w{9}\w$/;
if (!reg2.test(code)) {
console.log(4);
return false;
} else {
/*
登记管理机关行政区划码:只能使用阿拉伯数字表示。按照GB/T 2260编码。
例如:四川省成都市本级就是510100;四川省自贡市自流井区就是510302。
*/
let reg3 = /^(11|12|13|19|21|31|32|33|34|35|41|51|52|53|54|55|61|62|59|71|72|81|91|92|93|A1|G1|J1|N1|N2|N3|Y1)\d{6}\w{9}\w$/;
if (!reg3.test(code)) {
console.log(5);
return false;
} else {
var firstkey = calc(code.substr(8), firstarray, firstkeys, 11);
var firstword;
if (firstkey < 10) {
firstword = firstkey;
}
if (firstkey == 10) {
firstword = "X";
} else if (firstkey == 11) {
firstword = "0";
}
if (firstword != code.substr(16, 1)) {
console.log(6);
return false;
}else {
var secondkey = calc(code, secondarray, secondkeys, 31);
var secondword = secondarray[secondkey];
if (!secondword || secondword != code.substr(17, 1)) {
console.log(7);
return false;
}else {
var word = code.substr(0, 16) + firstword + secondword;
if (code != word) {
console.log(8);
return false;
}else {
console.log(9);
return true
}
}
}
}
}
}
}
}
},
转载于:https://blog.csdn.net/Syracuse123_?type=blog
参考链接:https://www.lmlphp.com/user/57840/article/item/2658937/
https://www.hftfund.com/contents/2019/10/10-3c400690bdb34720a22ad68e22956601.html