- 業務需求,需要用到非常嚴格的身份證號格式校驗
- 這里校驗方法經過測試真實身份證號碼日期改一位都不行,必須完全真實號碼
- 以下內容是項目中用到的校驗方法,記錄下來防止以后再用到
import check
from "../../utils/CheckIdCardUtil";<Col span
={8}><Form
.Item label
="身份證號">{getFieldDecorator('sfzmhm', {initialValue: applicantInfo
.sfzmhm
,rules: [{required: true, message: "手機號碼不能為空"},{validator: (_, value) =>!value
|| check(value
) ? Promise
.resolve() : Promise
.reject(new Error('請輸入正確的身份證號'))},{}],normalize:vin =>{if(vin
&& vin
!== undefined){return vin
.toUpperCase()}}})(<Inputsize
={this.CONSTANT.SIZE}placeholder
="請輸入"allowClear
={true}/>)}</Form
.Item
>
</Col
>
import moment
from "moment";const BIRTH_DATE_FORMAT = "YYYYMMDD"; const MINIMAL_BIRTH_DATE = new Date(-2209017600000); const NEW_CARD_NUMBER_LENGTH = 18;const OLD_CARD_NUMBER_LENGTH = 15;const VERIFY_CODE = [ '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' ]; const VERIFY_CODE_WEIGHT = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
export default function check(cardNumber){if (null != cardNumber
){if (OLD_CARD_NUMBER_LENGTH == cardNumber
.length
){cardNumber
= contertToNewCardNumber(cardNumber
);}return validate(cardNumber
);}return false;
}function validate(cardNumber){let result
= true;result
= result
&& (null != cardNumber
); result
= result
&& NEW_CARD_NUMBER_LENGTH == cardNumber
.length
; for (let i
= 0; result
&& i
< NEW_CARD_NUMBER_LENGTH - 1; i
++){let ch
= cardNumber
.charAt(i
);result
= result
&& ch
>= '0' && ch
<= '9';}result
= result
&& (calculateVerifyCode(cardNumber
) == cardNumber
.charAt(NEW_CARD_NUMBER_LENGTH - 1));let birthDate
= moment(getBirthDayPart(cardNumber
));result
= result
&& null != birthDate
;result
= result
&& birthDate
.isBefore(new Date());result
= result
&& birthDate
.isAfter(MINIMAL_BIRTH_DATE);let birthdayPart
= getBirthDayPart(cardNumber
);let realBirthdayPart
= moment(birthDate
).format(BIRTH_DATE_FORMAT);result
= result
&& (birthdayPart
== realBirthdayPart
);return result
;
}function getBirthDayPart(cardNumber){return cardNumber
.substring(6, 14);
}
function calculateVerifyCode(cardNumber){let sum
= 0;for (let i
= 0; i
< NEW_CARD_NUMBER_LENGTH - 1; i
++){let ch
= cardNumber
.substr(i
,1);sum
+= (parseInt(ch
- '0')) * VERIFY_CODE_WEIGHT[i
];}return VERIFY_CODE[sum
% 11];
}
function contertToNewCardNumber(oldCardNumber){const pre
= oldCardNumber
.substring(0, 6)+"19"+oldCardNumber
.substring(6);return pre
+calculateVerifyCode(pre
);
}
總結
以上是生活随笔為你收集整理的严格身份证格式校验,真实身份证号校验方法文件CheckIdCardUtil.js的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。