浏览代码

update id card validation

master
cyril.tsui 1年前
父节点
当前提交
69390ef6df
共有 1 个文件被更改,包括 141 次插入29 次删除
  1. +141
    -29
      src/pages/authentication/auth-forms/CustomFormWizard.js

+ 141
- 29
src/pages/authentication/auth-forms/CustomFormWizard.js 查看文件

@@ -376,21 +376,66 @@ const CustomFormWizard = (props) => {
}

function handleIdNo(idNo,selectedIdDocType,checkDigit) {
var pattern = /^[A-Z][0-9]*$/;
var space = /\s/;
if (!idNo.match(pattern)) {
return false;
}else if
(selectedIdDocType=="HKID"&&checkDigit==""){
return false;
}
else if (idNo.match(space)) {
return false;
}else if (idNo.length < 7) {
return false;
} else {
// console.log("IdNo true")
return true;
// var pattern = /^[A-Z][0-9]*$/;
var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/;
var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/;
var pattern_passport = /^[A-Z]{1}[0-9]{8}$/;
var pattern_CHID = /^[0-9]{6}(20|19)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9X]{1}/;
var pattern_otherCert = /^[A-Z]{1}[0-9]{5,}/;
// var space = /\s/;
// if (!idNo.match(pattern)) {
// return false;
// } else if (selectedIdDocType=="HKID"&&checkDigit==""){
// return false;
// } else if (idNo.match(space)) {
// return false;
// } else if (idNo.length < 6) {
// return false;
// } else {
// // console.log("IdNo true")
// return true;
// }
switch (selectedIdDocType) {
case "HKID":
if (checkDigit === "") return false
if (idNo.match(pattern_HKIDv1)) {
return true
} else if (idNo.match(pattern_HKIDv2)) {
return true
} else {
return false
}
case "passport":
if (idNo.match(pattern_passport)) {
return true
} else {
return false
}
case "CNID":
if (idNo.match(pattern_CHID)) {
const subStr_year = idNo.substring(6, 10)
const subStr_month = idNo.substring(10, 12)
const subStr_date = idNo.substring(12, 14)
const today = new Date()
const inputDate = new Date(`${subStr_year}-${subStr_month}-${subStr_date}`)

if (inputDate > today || inputDate === "Invalid Date" || inputDate.getFullYear().toString() !== subStr_year || (inputDate.getMonth() + 1).toString().padStart(2, "0") !== subStr_month || inputDate.getDate().toString().padStart(2, "0") !== subStr_date) {
return false
} else {
return true
}
} else {
return false
}
case "otherCert":
if (idNo.match(pattern_otherCert)) {
return true
} else {
return false
}
default:
break;
}
}

@@ -480,17 +525,57 @@ const CustomFormWizard = (props) => {
address3: yup.string().max(255).required('請輸入第三行地址'),
email: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵'),
emailConfirm: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵').oneOf([yup.ref('email'), null], '請輸入相同電郵'),
idNo: yup.string().required('請輸入證件號碼')
.matches(/^[aA-zZ0-9\s]+$/, "證件號碼不包含特殊字符")
.matches(/^\S*$/, '證件號碼不包含空格')
.test('checkIDCardFormat', '請輸入香港身份證號碼', function(value) {
idNo: yup.string().required(`請輸入${selectedIdDocInputType}號碼`)
.matches(/^[aA-zZ0-9\s]+$/, `${selectedIdDocInputType}號碼不包含特殊字符`)
.matches(/^\S*$/, `${selectedIdDocInputType}號碼不包含空格`)
.test('checkIDCardFormat', `請輸入有效的${selectedIdDocInputType}號碼`, function(value) {
const idDocType = selectedIdDocType.type;
var pattern = /^[A-Z][0-9]*$/;
var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/;
var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/;
var pattern_passport = /^[A-Z]{1}[0-9]{8}$/;
var pattern_CHID = /^[0-9]{6}(20|19)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9X]{1}/;
var pattern_otherCert = /^[A-Z]{1}[0-9]{5,}/;
if(value!==undefined){
if (!value.match(pattern)&&idDocType=="HKID"&&value.length<7) {
return false
} else {
return true
switch (idDocType) {
case "HKID":
if (value.match(pattern_HKIDv1)) {
return true
} else if (value.match(pattern_HKIDv2)) {
return true
} else {
return false
}
case "passport":
if (value.match(pattern_passport)) {
return true
} else {
return false
}
case "CNID":
if (value.match(pattern_CHID)) {
const subStr_year = value.substring(6, 10)
const subStr_month = value.substring(10, 12)
const subStr_date = value.substring(12, 14)
const today = new Date()
const inputDate = new Date(`${subStr_year}-${subStr_month}-${subStr_date}`)

if (inputDate > today || inputDate === "Invalid Date" || inputDate.getFullYear().toString() !== subStr_year || (inputDate.getMonth() + 1).toString().padStart(2, "0") !== subStr_month || inputDate.getDate().toString().padStart(2, "0") !== subStr_date) {
return false
} else {
return true
}
} else {
return false
}
case "otherCert":
if (value.match(pattern_otherCert)) {
return true
} else {
return false
}
default:
break;
}
}
}),
@@ -754,17 +839,31 @@ const CustomFormWizard = (props) => {
<OutlinedInput
id="idNo-login"
type="text"
value={formik.values.idNo.toUpperCase().trim()}
name="idNo"
onChange={formik.handleChange}
value={formik.values.idNo}
onChange={async (e)=>{
const ele = document.getElementById('idNo-login')
const startPos = ele.selectionStart
if (e.type === "change") {
if (!(e.target.value.match(/\s/g))) {
const newValue = await e.target.value.toUpperCase()
await formik.setFieldValue("idNo", newValue)
ele.setSelectionRange(startPos, startPos)
} else {
await formik.setFieldValue("idNo", formik.values.idNo)
ele.setSelectionRange(startPos-1, startPos-1)
}
}
}}
placeholder="證件號碼"
fullWidth
sx={{mr:1}}
error={Boolean(formik.touched.idNo && formik.errors.idNo)}
onBlur={formik.handleBlur}
inputProps={{
maxLength: selectedIdDocType.type =='HKID'?7:18,
maxLength: selectedIdDocType.type =='HKID'?8:18,
onKeyDown: (e) => {
console.log(e)
if (e.key === 'Enter') {
e.preventDefault();
}
@@ -813,9 +912,22 @@ const CustomFormWizard = (props) => {
<OutlinedInput
id="idNo-login"
type="text"
value={formik.values.idNo.trim()}
value={formik.values.idNo}
name="idNo"
onChange={formik.handleChange}
onChange={async (e)=>{
const ele = document.getElementById('idNo-login')
const startPos = ele.selectionStart
if (e.type === "change") {
if (!(e.target.value.match(/\s/g))) {
const newValue = await e.target.value.toUpperCase()
await formik.setFieldValue("idNo", newValue)
ele.setSelectionRange(startPos, startPos)
} else {
await formik.setFieldValue("idNo", formik.values.idNo)
ele.setSelectionRange(startPos-1, startPos-1)
}
}
}}
placeholder="證件號碼"
fullWidth
sx={{mr:1}}


正在加载...
取消
保存