js身份证地址获取后解析成省市区+详细地址

 传入身份证地址如【‘重庆市大足县榕树街’】得到【重庆市,大足县】榕树街


 const { detailAddr, addressString } = handleAddress('重庆市大足县榕树街')//handleAddress(temp.ocr_res.address)

 console.log('detailAddr, addressString', detailAddr, addressString)


function handleAddress(address) {
  if (!address || typeof address !== 'string') {
    return {
      detailAddr: '',
      addressString: [],
      provinceName: '',
      cityName: '',
      districtName: ''
    };
  }

  try {
    // 定义直辖市列表
    const directCities = ['北京市', '上海市', '天津市', '重庆市'];
    // 定义自治区列表
    const autonomousRegions = ['内蒙古自治区', '广西壮族自治区', '西藏自治区', '宁夏回族自治区', '新疆维吾尔自治区'];
    
    let addressParts = [];
    let remainAddress = address.trim();
    let provinceName = '';
    let cityName = '';
    let districtName = '';
    let detailAddr = '';

    // 处理自治区
    let isAutonomousRegion = false;
    for (const region of autonomousRegions) {
      if (remainAddress.startsWith(region)) {
        provinceName = region;
        addressParts.push(provinceName);
        remainAddress = remainAddress.substring(region.length).trim();
        isAutonomousRegion = true;
        break;
      }
    }

    // 处理普通省份
    if (!isAutonomousRegion) {
      const provinceMatch = remainAddress.match(/^(.+?(省|特别行政区))/);
      if (provinceMatch && provinceMatch[1]) {
        provinceName = provinceMatch[1];
        addressParts.push(provinceName);
        remainAddress = remainAddress.substring(provinceMatch[0].length).trim();
      }
    }

    // 处理直辖市
    const isDirectCity = directCities.some(city => remainAddress.startsWith(city));
    if (isDirectCity) {
      const directCityMatch = remainAddress.match(/(北京市|上海市|天津市|重庆市)/);
      if (directCityMatch && directCityMatch[1]) {
        provinceName = directCityMatch[1];
        cityName = directCityMatch[1];
        addressParts.push(cityName);
        remainAddress = remainAddress.substring(directCityMatch[0].length).trim();
      }
    }

    // 处理地级市、自治州等
    if (!cityName) {
      // 先检查自治州
      const prefectureMatch = remainAddress.match(/^(.+?(自治州|地区|盟))/);
      if (prefectureMatch && prefectureMatch[1]) {
        cityName = prefectureMatch[1];
        addressParts.push(cityName);
        remainAddress = remainAddress.substring(prefectureMatch[0].length).trim();
      } else {
        // 再检查普通市
        const cityMatch = remainAddress.match(/^(.+?(市|自治县|旗))/);
        if (cityMatch && cityMatch[1]) {
          cityName = cityMatch[1];
          addressParts.push(cityName);
          remainAddress = remainAddress.substring(cityMatch[0].length).trim();
        }
      }
    }

    // 处理区县
    const districtMatch = remainAddress.match(/^(.+?(区|县|市|旗|镇|乡|街道|地区))/);
    if (districtMatch && districtMatch[1]) {
      districtName = districtMatch[1];
      addressParts.push(districtName);
      remainAddress = remainAddress.substring(districtMatch[0].length).trim();
    }

    // 剩余部分作为详细地址
    detailAddr = remainAddress;

    return {
      detailAddr,
      addressString: addressParts,
      provinceName,
      cityName,
      districtName
    };
  } catch (error) {
    console.error('地址解析错误:', error);
    return {
      detailAddr: address,
      addressString: [],
      provinceName: '',
      cityName: '',
      districtName: ''
    };
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值