// 统一社会信用代码
function validateSocialCardNumber(value) {
if (value === "") {
return false;
} else {
const 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'
]
const firstkeys = [3, 7, 9, 10, 5, 8, 4, 2]
const 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'
]
const secondkeys = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]
function calc(code, array1, array2, b) {
let count = 0
for (let i = 0; i < array2.length; i++) {
const a = code[i]
count += array2[i] * array1.indexOf(a)
}
const remainder = count % b
return remainder === 0 ? 0 : b - remainder
}
const code = value.toUpperCase()
if (code.length !== 18) {
return false
}
const reg = /^\w\w\d{6}\w{9}\w$/
if (!reg.test(code)) {
return false
} else {
/*
登记管理部门代码:使用阿拉伯数字或大写英文字母表示。
机构编制:1
民政:5
工商:9
其他:Y
*/
let reg1 = /^[1,5,9,Y]\w\d{6}\w{9}\w$/
if (!reg1.test(code)) {
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)) {
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)) {
return false
} else {
const firstkey = calc(code.substr(8), firstarray, firstkeys, 11)
let firstword
if (firstkey < 10) {
firstword = firstkey
}
if (firstkey === 10) {
firstword = 'X'
} else if (firstkey === 11) {
firstword = '0'
}
if (firstword !== code.substring(16, 17)) {
return false
} else {
const secondkey = calc(code, secondarray, secondkeys, 31)
const secondword = secondarray[secondkey]
if (!secondword || secondword !== code.substring(17, 18)) {
return false
} else {
const word = code.substring(0, 16) + firstword + secondword
return code === word;
}
}
}
}
}
}
}
}
7.(JavaScript)校验是否为企业统一信用代码
于 2024-01-29 10:16:55 首次发布