{"version":3,"sources":["jsdelivr-header.js","/npm/node-address-smart-parse@1.0.0/lib/index.js"],"names":[],"mappings":"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","file":"/npm/node-address-smart-parse@1.0.0/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/node-address-smart-parse@1.0.0/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const zipCode =  require('../json/zipCode.json')\nconst pcassCode = require('../json/pcasCode.json')\n\nvar addressList = []; //地址列表\nvar zipCodeList = []; //邮编列表\n\naddressList = pcassCode;\naddressList.forEach((item) => {\n  formatAddresList(item, 1, \"\");\n});\nzipCodeList = zipCodeFormat(zipCode);\n\n/**\n * 地址数据处理\n * @param addressList-各级数据对象\n * @param index-对应的省/市/县区/街道\n * @param province-只有直辖市会处理为  北京市北京市\n * @returns <array>\n */\nfunction formatAddresList(addressList, index, province) {\n  if (index === 1) {\n    //省\n    addressList.province = addressList.name;\n    addressList.type = \"province\";\n  }\n  if (index === 2) {\n    //市\n    if (addressList.name == \"市辖区\") {\n      addressList.name = province.name;\n    }\n    addressList.city = addressList.name;\n    addressList.type = \"city\";\n  }\n  if (index === 3) {\n    //区或者县\n    addressList.county = addressList.name;\n    addressList.type = \"county\";\n  }\n  if (index === 4) {\n    //街道\n    addressList.street = addressList.name;\n    addressList.type = \"street\";\n  }\n  if (addressList.children) {\n    index++;\n    addressList.children.forEach((res) => {\n      formatAddresList(res, index, addressList);\n    });\n  }\n}\n/**\n * 解析邮编\n * @param\n * @returns <array>\n */\nfunction zipCodeFormat(zipCode) {\n  let list = [];\n  zipCode.forEach((el) => {\n    if (el.child) {\n      el.child.forEach((event) => {\n        if (event.child) {\n          event.child.forEach((element) => {\n            list.push(element.zipcode);\n          });\n        }\n      });\n    }\n  });\n  return list;\n}\n\nvar smartObj = {};\n/**\n * 解析邮编\n * @param event识别的地址\n * @returns <obj>\n */\nfunction smart(event) {\n  event = stripscript(event); //过滤特殊字符\n  let obj = {};\n  let copyaddress = JSON.parse(JSON.stringify(event));\n  copyaddress = copyaddress.split(\" \");\n\n  copyaddress.forEach((res, index) => {\n    if (res) {\n      if (res.length == 1) {\n        res += \"XX\"; // 过滤掉一位的名字或者地址\n      }\n      let addressObj = smatrAddress(res);\n      obj = Object.assign(obj, addressObj);\n      if (JSON.stringify(addressObj) === \"{}\") {\n        obj.name = res.replace(\"XX\", \"\");\n      }\n    }\n  });\n  return obj;\n}\n\nfunction smatrAddress(event) {\n  smartObj = {};\n  let address = event;\n  //address=  event.replace(/\\s/g, ''); //去除空格\n  address = stripscript(address); //过滤特殊字符\n\n  //身份证号匹配\n  if (IdentityCodeValid(address)) {\n    smartObj.idCard = address;\n    address = address.replace(address, \"\");\n  }\n\n  //电话匹配\n  let phone = address.match(\n    /(86-[1][0-9]{10}) | (86[1][0-9]{10})|([1][0-9]{10})/g\n  );\n  if (phone) {\n    smartObj.phone = phone[0];\n    address = address.replace(phone[0], \"\");\n  }\n\n  //邮编匹配\n  zipCodeList.forEach((res) => {\n    if (address.indexOf(res) != -1) {\n      let num = address.indexOf(res);\n      let code = address.slice(num, num + 6);\n      smartObj.zipCode = code;\n      address = address.replace(code, \"\");\n    }\n  });\n  let matchAddress = \"\";\n  //省匹配 比如输入北京市朝阳区，会用北  北京  北京市 北京市朝 以此类推在addressList里的province中做匹配，会得到北京市  河北省 天津市等等；\n  let matchProvince = []; //粗略匹配上的省份\n  // for (let begIndex = 0; begIndex < address.length; begIndex++) {\n  matchAddress = \"\";\n  for (let endIndex = 0; endIndex < address.length; endIndex++) {\n    //  if (endIndex > begIndex) {\n    matchAddress = address.slice(0, endIndex + 2);\n    addressList.forEach((res) => {\n      if (res[\"province\"].indexOf(matchAddress) != -1) {\n        matchProvince.push({\n          province: res.province,\n          provinceCode: res.code,\n          matchValue: matchAddress,\n        });\n      }\n    });\n    // }\n  }\n  //  }\n\n  //统计筛选初略统计出的省份\n  matchProvince.forEach((res) => {\n    res.index = 0;\n    matchProvince.forEach((el) => {\n      if (res.province == el.province) {\n        el.index++;\n        if (res.matchValue.length > el.matchValue.length) {\n          el.matchValue = res.matchValue;\n        }\n      }\n    });\n  });\n  if (matchProvince.length != 0) {\n    let province = matchProvince.reduce((p, v) => (p.index < v.index ? v : p));\n    smartObj.province = province.province;\n    smartObj.provinceCode = province.provinceCode;\n    address = address.replace(province.matchValue, \"\");\n  }\n  //市查找\n  let matchCity = []; //粗略匹配上的市\n  matchAddress = \"\";\n  for (let endIndex = 0; endIndex < address.length; endIndex++) {\n    matchAddress = address.slice(0, endIndex + 2);\n    addressList.forEach((el) => {\n      //  if (el.name == smartObj.province) {\n      if (el.code == smartObj.provinceCode || !smartObj.provinceCode) {\n        if (\n          smartObj.province == \"北京市\" ||\n          smartObj.province == \"天津市\" ||\n          smartObj.province == \"上海市\" ||\n          smartObj.province == \"重庆市\"\n        ) {\n          el.children.forEach((item) => {\n            item.children.forEach((res) => {\n              if (res[\"county\"].indexOf(matchAddress) != -1) {\n                matchCity.push({\n                  county: res.county,\n                  countyCode: res.code,\n                  city: item.city,\n                  cityCode: item.code,\n                  matchValue: matchAddress,\n                  province: el.province,\n                  provinceCode: el.code,\n                });\n              }\n            });\n          });\n        } else {\n          el.children.forEach((res) => {\n            if (res[\"city\"].indexOf(matchAddress) != -1) {\n              matchCity.push({\n                city: res.city,\n                cityCode: res.code,\n                matchValue: matchAddress,\n                province: el.province,\n                provinceCode: el.code,\n              });\n            }\n          });\n        }\n      }\n      // }\n    });\n  }\n\n  //统计筛选初略统计出的市\n  matchCity.forEach((res) => {\n    res.index = 0;\n    matchCity.forEach((el) => {\n      if (res.city == el.city) {\n        el.index++;\n        if (res.matchValue.length > el.matchValue.length) {\n          el.matchValue = res.matchValue;\n        }\n      }\n    });\n  });\n  if (matchCity.length != 0) {\n    let city = matchCity.reduce((p, v) => (p.index < v.index ? v : p));\n    smartObj.city = city.city;\n    smartObj.cityCode = city.cityCode;\n    smartObj.county = city.county;\n    smartObj.countyCode = city.countyCode;\n    if (!smartObj.province) {\n      smartObj.province = city.province;\n      smartObj.provinceCode = city.provinceCode;\n    }\n    address = address.replace(city.matchValue, \"\");\n  }\n\n  //区县查找\n  let matchCounty = []; //粗略匹配上的区县\n  matchAddress = \"\";\n  for (let endIndex = 0; endIndex < address.length; endIndex++) {\n    matchAddress = address.slice(0, endIndex + 2);\n    addressList.forEach((el) => {\n      //  if (el.name == smartObj.province) {\n      if (\n        smartObj.province == \"北京市\" ||\n        smartObj.province == \"天津市\" ||\n        smartObj.province == \"上海市\" ||\n        smartObj.province == \"重庆市\"\n      ) {\n        //nothing\n      } else {\n        el.children.forEach((item) => {\n          //  if (item.name == smartObj.city) {\n          item.children.forEach((res) => {\n            if (res[\"county\"].indexOf(matchAddress) != -1) {\n              //省/市  || 省\n              if (smartObj.province) {\n                if (res.code.slice(0, 4) == smartObj.cityCode) {\n                  matchCounty.push({\n                    county: res.county,\n                    countyCode: res.code,\n                    city: item.city,\n                    cityCode: item.code,\n                    matchValue: matchAddress,\n                    province: el.province,\n                    provinceCode: el.code,\n                  });\n                }\n              } else if (!smartObj.province && !smartObj.city) {\n                matchCounty.push({\n                  county: res.county,\n                  countyCode: res.code,\n                  city: item.city,\n                  cityCode: item.code,\n                  matchValue: matchAddress,\n                  province: el.province,\n                  provinceCode: el.code,\n                });\n              }\n            }\n          });\n          //  }\n        });\n      }\n      //  }\n    });\n  }\n  //统计筛选初略统计出的区县\n  matchCounty.forEach((res) => {\n    res.index = 0;\n    matchCounty.forEach((el) => {\n      if (res.city == el.city) {\n        el.index++;\n        if (res.matchValue.length > el.matchValue.length) {\n          el.matchValue = res.matchValue;\n        }\n      }\n    });\n  });\n  if (matchCounty.length != 0) {\n    let city = matchCounty.reduce((p, v) => (p.index < v.index ? v : p));\n    smartObj.county = city.county;\n    smartObj.countyCode = city.countyCode;\n    if (!smartObj.province) {\n      smartObj.province = city.province;\n      smartObj.provinceCode = city.provinceCode;\n    }\n    if (!smartObj.city) {\n      smartObj.city = city.city;\n      smartObj.cityCode = city.cityCode;\n    }\n    address = address.replace(city.matchValue, \"\");\n  }\n\n  //街道查找\n  let matchStreet = []; //粗略匹配上的街道查\n  matchAddress = \"\";\n  for (let endIndex = 0; endIndex < address.length; endIndex++) {\n    matchAddress = address.slice(0, endIndex + 3);\n    addressList.forEach((el) => {\n      if (el.name == smartObj.province) {\n        if (\n          smartObj.province == \"北京市\" ||\n          smartObj.province == \"天津市\" ||\n          smartObj.province == \"上海市\" ||\n          smartObj.province == \"重庆市\"\n        ) {\n          //nothing\n        } else {\n          el.children.forEach((element) => {\n            if (element.name == smartObj.city) {\n              element.children.forEach((item) => {\n                if (item.name == smartObj.county) {\n                  item.children.forEach((res) => {\n                    if (res[\"street\"].indexOf(matchAddress) != -1) {\n                      matchStreet.push({\n                        street: res.street,\n                        streetCode: res.code,\n                        matchValue: matchAddress,\n                      });\n                    }\n                  });\n                }\n              });\n            }\n          });\n        }\n      }\n    });\n  }\n\n  //统计筛选初略统计出的区县\n  matchStreet.forEach((res) => {\n    res.index = 0;\n    matchStreet.forEach((el) => {\n      if (res.city == el.city) {\n        el.index++;\n        if (res.matchValue.length > el.matchValue.length) {\n          el.matchValue = res.matchValue;\n        }\n      }\n    });\n  });\n\n  if (matchStreet.length != 0) {\n    let city = matchStreet.reduce((p, v) => (p.index < v.index ? v : p));\n    smartObj.street = city.street;\n    smartObj.streetCode = city.streetCode;\n    address = address.replace(city.matchValue, \"\");\n  }\n  //姓名查找\n  if (smartObj.province) {\n    smartObj.address = address;\n  }\n\n  return smartObj;\n}\n////过滤特殊字符\nfunction stripscript(s) {\n  s = s.replace(/(\\d{3})-(\\d{4})-(\\d{4})/g, \"$1$2$3\");\n  s = s.replace(/(\\d{3}) (\\d{4}) (\\d{4})/g, \"$1$2$3\");\n  var pattern = new RegExp(\n    \"[`~!@#$^&*()=|{}':;',\\\\[\\\\].<>/?~！@#￥……&*（）——|{}【】‘；：”“’。，、？-]\"\n  );\n  var rs = \"\";\n  for (var i = 0; i < s.length; i++) {\n    rs = rs + s.substr(i, 1).replace(pattern, \" \");\n  }\n  rs = rs.replace(/[\\r\\n]/g, \"\");\n  return rs;\n}\n\nfunction IdentityCodeValid(code) {\n  let pass;\n  var city = {\n    11: \"北京\",\n    12: \"天津\",\n    13: \"河北\",\n    14: \"山西\",\n    15: \"内蒙古\",\n    21: \"辽宁\",\n    22: \"吉林\",\n    23: \"黑龙江 \",\n    31: \"上海\",\n    32: \"江苏\",\n    33: \"浙江\",\n    34: \"安徽\",\n    35: \"福建\",\n    36: \"江西\",\n    37: \"山东\",\n    41: \"河南\",\n    42: \"湖北 \",\n    43: \"湖南\",\n    44: \"广东\",\n    45: \"广西\",\n    46: \"海南\",\n    50: \"重庆\",\n    51: \"四川\",\n    52: \"贵州\",\n    53: \"云南\",\n    54: \"西藏 \",\n    61: \"陕西\",\n    62: \"甘肃\",\n    63: \"青海\",\n    64: \"宁夏\",\n    65: \"新疆\",\n    71: \"台湾\",\n    81: \"香港\",\n    82: \"澳门\",\n    91: \"国外 \",\n  };\n  var tip = \"\";\n  pass = true;\n\n  if (!code || !/^\\d{17}(\\d|X)$/i.test(code)) {\n    tip = \"身份证号格式错误\";\n    pass = false;\n  } else if (!city[code.substr(0, 2)]) {\n    tip = \"地址编码错误\";\n    pass = false;\n  } else {\n    //18位身份证需要验证最后一位校验位\n    if (code.length == 18) {\n      code = code.split(\"\");\n      //∑(ai×Wi)(mod 11)\n      //加权因子\n      var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n      //校验位\n      var parity = [1, 0, \"X\", 9, 8, 7, 6, 5, 4, 3, 2];\n      var sum = 0;\n      var ai = 0;\n      var wi = 0;\n      for (var i = 0; i < 17; i++) {\n        ai = code[i];\n        wi = factor[i];\n        sum += ai * wi;\n      }\n      var last = parity[sum % 11];\n      if (parity[sum % 11] != code[17]) {\n        tip = \"校验位错误\";\n        pass = false;\n      }\n    }\n  }\n  return pass;\n}\n\nmodule.exports = {\n  smart\n}"]}