求TypeScript/JS环境下的ISIN号码验证函数
ISIN 号码验证函数(TypeScript/JavaScript)
验证逻辑
ISIN的有效性验证需遵循以下核心规则:
- 长度必须严格为12个字符
- 前两位是大写国家/地区代码(A-Z),剩余10位由字母(A-Z)和数字(0-9)组成,最后一位为校验位
- 通过**Luhn算法(模10校验)**验证:先将所有字母转换为对应数字(A=10,B=11…Z=35),再对转换后的数字序列执行Luhn校验
TypeScript 实现
function validateISIN(isin: string): boolean { // 检查长度合法性 if (isin.length !== 12) return false; // 验证格式:前两位大写字母,后续10位为字母/数字组合 const isinPattern = /^[A-Z]{2}[A-Z0-9]{10}$/; if (!isinPattern.test(isin)) return false; // 将字母转换为对应数字字符串 let numericStr = ''; for (const char of isin) { const charCode = char.charCodeAt(0); if (charCode >= 65 && charCode <= 90) { // 处理A-Z numericStr += (charCode - 55).toString(); } else { // 处理0-9 numericStr += char; } } // 执行Luhn算法校验 let sum = 0; let isEven = false; // 从右往左遍历数字序列 for (let i = numericStr.length - 1; i >= 0; i--) { let digit = parseInt(numericStr[i], 10); if (isEven) { digit *= 2; // 若乘积大于9,减去9等价于取各位数字之和 if (digit > 9) digit -= 9; } sum += digit; isEven = !isEven; } // 总和能被10整除则ISIN有效 return sum % 10 === 0; }
JavaScript 实现
function validateISIN(isin) { if (isin.length !== 12) return false; const isinPattern = /^[A-Z]{2}[A-Z0-9]{10}$/; if (!isinPattern.test(isin)) return false; let numericStr = ''; for (const char of isin) { const charCode = char.charCodeAt(0); if (charCode >= 65 && charCode <= 90) { numericStr += (charCode - 55).toString(); } else { numericStr += char; } } let sum = 0; let isEven = false; for (let i = numericStr.length - 1; i >= 0; i--) { let digit = parseInt(numericStr[i], 10); if (isEven) { digit *= 2; if (digit > 9) digit -= 9; } sum += digit; isEven = !isEven; } return sum % 10 === 0; }
示例测试
console.log(validateISIN("FR0014001NN8")); // true console.log(validateISIN("FR0014001NN7")); // false
内容的提问来源于stack exchange,提问作者Farandole
相关产品推荐
相关产品推荐

