|
|
@@ -17,15 +17,15 @@ const extractGenderFromIdNumber = (idNumber: string): 'M' | 'F' | undefined => {
|
|
|
if (!idNumber || idNumber.length !== 18) {
|
|
|
return undefined;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 获取第17位(索引16)- 性别标识位
|
|
|
const genderDigit = parseInt(idNumber[16]);
|
|
|
-
|
|
|
+
|
|
|
// 验证是否为有效数字
|
|
|
if (isNaN(genderDigit)) {
|
|
|
return undefined;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 奇数为男性,偶数为女性
|
|
|
return genderDigit % 2 === 1 ? 'M' : 'F';
|
|
|
};
|
|
|
@@ -72,6 +72,13 @@ const parseTabSeparatedText = (text: string) => {
|
|
|
const gender = extractGenderFromIdNumber(idNumber);
|
|
|
const patient_sex = gender || 'O'; // 如果无法判断,使用 'O' (Other)
|
|
|
|
|
|
+
|
|
|
+ // 从身份证提取出生日期
|
|
|
+ const birthYear = parseInt(idNumber.substring(6, 10));
|
|
|
+ const birthMonth = parseInt(idNumber.substring(10, 12));
|
|
|
+ const birthDay = parseInt(idNumber.substring(12, 14));
|
|
|
+ const patient_dob = dayjs().year(birthYear).month(birthMonth - 1).date(birthDay);
|
|
|
+
|
|
|
const result = {
|
|
|
patient_name: name,
|
|
|
patient_age: {
|
|
|
@@ -79,9 +86,9 @@ const parseTabSeparatedText = (text: string) => {
|
|
|
unit: ageUnit
|
|
|
},
|
|
|
patient_id: idNumber,
|
|
|
- patient_sex: patient_sex
|
|
|
+ patient_sex: patient_sex,
|
|
|
+ patient_dob: patient_dob.isValid() ? patient_dob.toISOString() : undefined
|
|
|
};
|
|
|
-
|
|
|
console.log('[QRCodeParse] 解析结果:', result);
|
|
|
console.log('[QRCodeParse] 性别判断:', gender ? `从身份证号提取: ${gender}` : '无法判断性别,使用默认值 O');
|
|
|
return result;
|