import request from './request'; /** * 识别身份证正面或反面 * @param {string} imageUrl - 身份证图片URL * @param {number} type - 1: 正面, 2: 反面 * @returns {Promise} - 识别结果 */ export const recognizeIdCard = async (imageUrl, type = 1) => { try { const result = await request.post('/api/recognize/idCard', { img_url: imageUrl, type: type }); if (result.code !== 200) { throw new Error(result.msg || '身份证识别失败'); } // 验证是否真的识别到了有效信息 const hasValidData = validateIdCardResult(result.data, type); if (!hasValidData) { throw new Error(`未识别到有效的身份证${type === 1 ? '正面' : '反面'}信息,请确保上传的是清晰的身份证照片`); } return result.data; } catch (error) { console.error('身份证识别失败:', error); throw new Error(`未识别到有效的身份证${type === 1 ? '正面' : '反面'}信息,请确保上传的是清晰的身份证照片`); } }; /** * 验证身份证识别结果是否有效 * @param {Object} data - 识别结果 * @param {number} type - 1: 正面, 2: 反面 * @returns {boolean} 是否有效 */ const validateIdCardResult = (data, type) => { if (type === 1) { // 正面需要验证姓名和身份证号 return (data.name && data.name.trim()) || (data.id_number && data.id_number.trim()); } else { // 反面需要验证有效期 return (data.start_date && data.start_date.trim()) || (data.end_date && data.end_date.trim()); } }; /** * 识别营业执照 * @param {string} imageUrl - 营业执照图片URL * @returns {Promise} 识别结果 */ export const recognizeBusinessLicense = async (imageUrl) => { try { console.log('发送营业执照识别请求,图片URL:', imageUrl); const result = await request.post('/api/recognize/uscc', { img_url: imageUrl }); console.log('营业执照识别接口完整响应:', JSON.stringify(result, null, 2)); if (result.code !== 200) { throw new Error(result.msg || '营业执照识别失败'); } console.log('接口返回的 uscc_num 字段:', result.data.uscc_num); console.log('接口返回的 uscc_name 字段:', result.data.uscc_name); console.log('接口返回的 uscc_type 字段:', result.data.uscc_type); // 验证是否真的识别到了有效信息 const hasValidData = validateBusinessLicenseResult(result.data); if (!hasValidData) { throw new Error('未识别到有效的营业执照信息,请确保上传的是清晰的营业执照照片'); } // 直接返回接口的所有数据,不做映射 return { uscc_num: result.data.uscc_num || '', uscc_name: result.data.uscc_name || '', legal_name: result.data.legal_name || '', address: result.data.address || '', op_scope: result.data.op_scope || '', establishing_date: result.data.establishing_date || '', uscc_type: result.data.uscc_type || '' // 直接返回原始企业类型 }; } catch (error) { console.error('营业执照识别失败:', error); throw new Error('未识别到有效的营业执照信息,请确保上传的是清晰的营业执照照片'); } }; /** * 验证营业执照识别结果是否有效 * @param {Object} data - 识别结果 * @returns {boolean} 是否有效 */ const validateBusinessLicenseResult = (data) => { // 检查关键字段是否有值 const requiredFields = ['uscc_num', 'uscc_name']; let hasValidData = false; for (const field of requiredFields) { if (data[field] && data[field].trim()) { hasValidData = true; break; } } return hasValidData; }; /** * 格式化日期字符串 * @param {string} dateStr - 日期字符串(YYYYMMDD格式) * @returns {string} - 格式化的日期 "YYYY年MM月DD日" */ export const formatDateFromNumber = (dateStr) => { if (!dateStr) return ''; // 处理8位数字格式 if (/^\d{8}$/.test(dateStr)) { const year = dateStr.substring(0, 4); const month = dateStr.substring(4, 6); const day = dateStr.substring(6, 8); return `${year}年${parseInt(month)}月${parseInt(day)}日`; } // 处理其他格式 return dateStr; }; /** * 解析身份证有效期 * @param {string} startDate - 开始日期 * @param {string} endDate - 结束日期 * @returns {Object} { startDate, endDate, isPermanent } */ export const parseValidPeriod = (startDate, endDate) => { const isPermanent = endDate === '长期' || endDate === '永久' || endDate === '长久有效'; return { startDate: formatDateFromNumber(startDate), endDate: isPermanent ? '长久有效' : formatDateFromNumber(endDate), isPermanent: isPermanent }; }; /** * 验证身份证号码 * @param {string} idNumber - 身份证号码 * @returns {boolean} - 是否有效 */ export const validateIdNumber = (idNumber) => { if (!idNumber) return false; // 简单验证:15位或18位 const reg = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/; return reg.test(idNumber); }; /** * 验证营业执照号码(统一社会信用代码) * @param {string} usccNum - 统一社会信用代码 * @returns {boolean} - 是否有效 */ export const validateUsccNum = (usccNum) => { if (!usccNum) return false; // 统一社会信用代码为18位 return usccNum.length === 18; };