成绩展现

批量生成快递地址的网址:http://poi.moyutime.cn/

咱们公司常常须要生成快递地址,我把这个性能独自提取了进去,做成了一个网站(查问收费,下载免费,介意勿点)。

这样咱们当前再须要生成快递地址,只须要下载就能够了,再也不必跑命令行了。

有同样须要小伙伴,能够看看。不差钱的小伙伴,能够找我,价格从优,秒发货。 跟我一样,囊肿羞涩的,就接着往下看,我说下我的思路。看看对你有没有帮忙。

前提

在有些公司,尤其是像咱们这样电商类公司,常常须要生成假的快递地址,进行零碎测试。

这不前几天,咱们组就开发了一个派件零碎,就须要用到假的快递地址。

而且不是1个,是几千个,而且还要求准确到小区。

刚开始听到这需要我是一脸懵逼的。

不过作为一名8年的研发老狗,转眼间我就想到了解决办法。

折腾了一天,终于完满交差。

思路

其实这个思路很简略,要想生成快递地址,咱们首先要晓得全国各地小区的地址。有了小区地址,咱们再随机生成户号、姓名和手机号,就能组成一个快递地址了。

而小区地址也很容易获取,高德地图、腾讯地图和百度地图都有提供相应的接口。我这里以高德地图为例,说下我的办法。

开发

1.获取全国所有小区的地址

首先在高德地图开放平台 注册个账号,并且创立一个利用。

创立利用

增加key
我开发的是web端的,所以这里我抉择的是【Web端(JS API)】,你们能够依据本人的须要抉择不同的类型。

增加完能够之后,咱们就获取了一个,高德地图给咱们生成的key。拿到这个key,咱们就能够调用高德地图提供的api了。因为咱们选的的是web服务。所以咱们api文档是【Web服务 API】

查看文档

搜寻小区,咱们须要调用的api是【搜寻POI】

查看接口

咱们要调用的接口是这个:

//restapi.amap.com/v3/place/text?key=您的key&keywords=小区&types=120000&city=110101&children=1&offset=20&page=1&extensions=base&citylimit=true

其中参数如下

  • key: 刚刚生成的key。
  • keywords: 搜寻的关键字,咱们搜的是小区,所以填小区
  • types:poi类型,小区的poi类型是120000. 想查看其余类型,能够点击POI分类编码
  • city:这里能够填城市名也能够填citycode或者adcode,为了后果更精确,咱们抉择填adcode。110101为北京市东城区的adcode,其余各个中央的adcode请查看下方的城市编码表
  • offset:每页记录数,默认是20,最多是25。我应用了默认值20
  • page:为当前页数,默认是1
  • citylimit:仅返回指定城市数据

申请后果

返回的后果中,count为总条数,pois数组里就是各个小区的详细信息。因为咱们的offset设置的是20,所以一次申请只能返回20条小区数据。咱们先把这些数据存入咱们的数据库里,不便当前调用。

如果要遍历所有小区,就须要应用循环,通过扭转page参数,屡次申请接口。

这个挺简略的,我就不开展讲了。

拿到了该地区所有的小区数据后。咱们能够通过遍历城市编码表中的所有地区,拿到全国所有小区的数据。

高德地图一天一个账号能够收费申请5000次,我借了很多账号,总算是搞定了。我应用的数据库是mongodb,存储到数据库中构造如下,一共大概有38万条数据.

生成随机楼号、单元号和户号

一个实现的快递地址通常还须要蕴含用户的楼号,单元号和户号。这个咱们应用Math.random()随机生成就能够了。
为了数据看起来不太离谱,楼的话咱们在1-16楼随机生成,单元在1-4之间随机生成。

代码如下:

// 生成随机单元号function randomUnitNum() {  // 楼号 1-16 随机生成  // 单元 1-4 之间随机生成  // 户号 [1-6]0[1-6]  return randomNum(1, 16) + '楼' + randomNum(1, 4) + '单元' + randomNum(1, 6) + '0' + randomNum(1, 6) + '号';}

生成随机手机号

代码如下:

/** * 生成随机手机号 * @return */function randomPhoneNum() {  const preNumList = [131, 135, 137, 139, 151, 150, 189, 136, 186, 187, 152, 138, 180];  const rNum = randomNum(0, 12);  const afNum = randomNum(13221010, 98241249);  return String(preNumList[rNum]) + String(afNum);}

生成随机姓名

代码如下:

/** * 随机生成用户姓名 * @return 返回随机生成的用户姓名 */function randomUserName() {  const xStr = '陈林黃张李王吴刘蔡杨许郑谢洪郭邱曾廖赖徐周叶苏庄吕江何萧罗高周叶苏庄吕江何萧罗高潘简朱锺彭游詹胡施沈余卢梁赵颜柯翁魏孙戴范方宋邓杜傅侯曹薛丁卓马阮董唐温蓝蒋石古纪姚连冯欧程汤黄田康姜汪白邹尤巫钟黎涂龚严韩袁金童陆夏柳凃邵';  const femaleStr = '嘉琼桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芳香燕彩春菊勤珍贞莉兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳';  const maleStr = '涛昌进林有坚和彪博诚先敬震振壮会群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发成康星光天达安岩中茂武新利清飞彬富顺信子杰楠榕风航弘';  const allNameStr = femaleStr + maleStr;  const ran = randomNum(0, 10);  let mingStr = '';  if (ran < 1) {    // 姓名为2个字    mingStr = allNameStr[randomNum(0, allNameStr.length)];  } else {    mingStr = allNameStr[randomNum(0, allNameStr.length)] + allNameStr[randomNum(0, allNameStr.length)];  }  return xStr[randomNum(0, xStr.length - 1)] + mingStr;}

生成快递地址

通过以上步骤,咱们就拿到了所有咱们想要的数据。通过这些数据,咱们想要生成一个快递地址,几乎就不要太容易了。至此,这个需要咱们开发结束。

一份残缺的数据结构如下所示: