// 根据身份证号的倒数第二位判断性别,偶数为女,奇数为男
getSexFromIdCard = (idCard) => {
const genderDigit = parseInt(idCard.charAt(idCard.length - 2), 10);
return genderDigit % 2 === 0 ? 1 : 0;
};
// 根据身份证号显生日 若身份证号格式错误则显示当天日期
calculateBirthdayFromIdCard = (idCard) => {
let birthday = new Date().toISOString().slice(0, 10); // 当天日期
if(idCard){
if(idCard.length === 18) {
const year = idCard.substring(6, 10);
const month = idCard.substring(10, 12);
const day = idCard.substring(12, 14);
// 检查生日是否有效,年月日是否合法
if (!isNaN(year) && !isNaN(month) && !isNaN(day)) {
const parsedDate = new Date(`${year}-${month}-${day}`);
// 如果解析后的日期有效,则设置为生日
if (!isNaN(parsedDate.getTime())) {
birthday = `${year}-${month}-${day}`;
}
}
} else if (idCard.length === 15) {
const year = `19${idCard.substring(6, 8)}`;
const month = idCard.substring(8, 10);
const day = idCard.substring(10, 12);
// 检查生日是否有效,年月日是否合法
if (!isNaN(year) && !isNaN(month) && !isNaN(day)) {
const parsedDate = new Date(`${year}-${month}-${day}`);
// 如果解析后的日期有效,则设置为生日
if (!isNaN(parsedDate.getTime())) {
birthday = `${year}-${month}-${day}`;
}
}
}
}
return birthday;
};
// render()里
<FormItem {...formItemLayout} label="生日">
{getFieldDecorator('birthday', {
initialValue: moment(this.calculateBirthdayFromIdCard(userDetail.idCard)) || "",
rules: [{
required: true,
message: '请选择生日',
}],
})(
<DatePicker
style={{ width: '100%' }}
placeholder='请选择生日'
showTime
format="YYYY-MM-DD"
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="性别">
{getFieldDecorator('sex', {
initialValue: userDetail.idCard ? this.getSexFromIdCard(userDetail.idCard) : undefined,
rules: [{
required: true,
message: '请选择性别',
}]
})(
<Select
style={{width: "100%"}}
placeholder='请选择性别'
>
{USER_SEX_TYPE.map((item) => (
<Option key={item.value} value={item.value}>
{item.text}
</Option>
))}
</Select>
)}
</FormItem>
根据身份证号自动显示生日和性别
于 2024-05-15 10:18:23 首次发布