util-helpers
Version:
34 lines (31 loc) • 1.18 kB
JavaScript
import { toString } from 'ut2';
var baseReg = /^[\dA-HJ-NPQRTUWXY]{2}\d{6}[\dA-HJ-NPQRTUWXY]{10}$/;
var baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');
function sumCheckCode(preCode) {
var total = 0;
var _loop_1 = function (i) {
var index = baseCodeArr.findIndex(function (item) { return item === preCode[i]; });
var wf = Math.pow(3, i) % 31;
total += index * wf;
};
for (var i = 0; i < 17; i++) {
_loop_1(i);
}
var remainder = total % 31;
var checkCodeIndex = remainder !== 0 ? 31 - remainder : 0;
return baseCodeArr[checkCodeIndex];
}
function isUnifiedIdentifier(value, options) {
var valueStr = toString(value);
var _a = (options || {}).checkCode, needCheckCode = _a === void 0 ? true : _a;
var passBaseRule = baseReg.test(valueStr);
if (!needCheckCode || !passBaseRule) {
return passBaseRule;
}
var preCode = valueStr.substring(0, 17);
var lastCode = valueStr.substring(valueStr.length - 1);
var checkCode = sumCheckCode(preCode);
return lastCode === checkCode;
}
isUnifiedIdentifier.sumCheckCode = sumCheckCode;
export { isUnifiedIdentifier as default };