├── .gitignore ├── .idea ├── php.xml ├── misc.xml ├── vcs.xml ├── .gitignore ├── modules.xml └── think-generator.iml ├── src └── generator │ ├── Helper.php │ ├── data │ ├── provinces.json │ └── surname.json │ ├── Generator.php │ ├── util │ ├── Mobile.php │ ├── Nickname.php │ ├── Email.php │ └── Identity.php │ └── BaseUtil.php ├── composer.json ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | .idea 3 | composer.lock -------------------------------------------------------------------------------- /.idea/php.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /src/generator/Helper.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/generator/data/provinces.json: -------------------------------------------------------------------------------- 1 | [ 2 | "北京市", 3 | "天津市", 4 | "河北省", 5 | "山西省", 6 | "内蒙古自治区", 7 | "辽宁省", 8 | "吉林省", 9 | "黑龙江省", 10 | "上海市", 11 | "江苏省", 12 | "浙江省", 13 | "安徽省", 14 | "福建省", 15 | "江西省", 16 | "山东省", 17 | "河南省", 18 | "湖北省", 19 | "湖南省", 20 | "广东省", 21 | "广西壮族自治区", 22 | "海南省", 23 | "重庆市", 24 | "四川省", 25 | "贵州省", 26 | "云南省", 27 | "西藏自治区", 28 | "陕西省", 29 | "甘肃省", 30 | "青海省", 31 | "宁夏回族自治区", 32 | "新疆维吾尔自治区", 33 | "台湾省", 34 | "香港特别行政区", 35 | "澳门特别行政区" 36 | ] -------------------------------------------------------------------------------- /.idea/think-generator.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dashingunique/think-generator", 3 | "description": "thinkphp6 random generation of mobile phone number, ID number, mailbox address, nickname and other test data.", 4 | "type": "src", 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "dashing unique", 9 | "email": "1107842285@qq.com" 10 | } 11 | ], 12 | "minimum-stability": "dev", 13 | "require": { 14 | "php": ">=7.0" 15 | }, 16 | "autoload": { 17 | "files": [ 18 | "src/generator/Helper.php" 19 | ], 20 | "psr-4": { 21 | "dashing\\": "src" 22 | } 23 | }, 24 | "extra": { 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/generator/Generator.php: -------------------------------------------------------------------------------- 1 | 4 | * +---------------------------------------------------------------------- 5 | * | Description: 随机生成器 6 | * +---------------------------------------------------------------------- 7 | */ 8 | 9 | namespace dashing\generator; 10 | 11 | use think\Manager; 12 | 13 | class Generator extends Manager 14 | { 15 | protected $namespace = '\\dashing\\generator\\util\\'; 16 | 17 | /** 18 | * 生成器 19 | * @param string $name 20 | * @return mixed 21 | */ 22 | public function generator(string $name) 23 | { 24 | return $this->driver(ucfirst($name)); 25 | } 26 | 27 | /** 28 | * 默认驱动 29 | * @return string|null 30 | */ 31 | public function getDefaultDriver() 32 | { 33 | return null; 34 | } 35 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Dashing.Li 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/generator/util/Mobile.php: -------------------------------------------------------------------------------- 1 | 4 | * +---------------------------------------------------------------------- 5 | * | Description: 手机号码生成器 6 | * +---------------------------------------------------------------------- 7 | */ 8 | 9 | namespace dashing\generator\util; 10 | 11 | use dashing\generator\BaseUtil; 12 | use think\helper\Arr; 13 | 14 | class Mobile extends BaseUtil 15 | { 16 | /** 17 | * @var string 手机号前缀:例如136 18 | */ 19 | protected $prefix = ''; 20 | 21 | /** 22 | * @var array 允许的号码段 23 | */ 24 | protected $allowPrefix = []; 25 | 26 | /** 27 | * 获取手机号前缀 28 | * @return string 29 | */ 30 | public function getPrefix() 31 | { 32 | $this->setPrefix(); 33 | return $this->prefix; 34 | } 35 | 36 | /** 37 | * 设置手机号前缀 38 | * @return $this 39 | */ 40 | public function setPrefix() 41 | { 42 | if (isset($this->attributes['prefix'])) { 43 | $this->prefix = $this->attributes['prefix']; 44 | } else { 45 | $allowPrefix = $this->getAllowPrefix(); 46 | $this->prefix = 1 . Arr::random($allowPrefix) . mt_rand(0, 9); 47 | } 48 | return $this; 49 | } 50 | 51 | /** 52 | * 获取允许的号码段(手机号第二位) 53 | * @return array 54 | */ 55 | public function getAllowPrefix(): array 56 | { 57 | $this->setAllowPrefix(); 58 | return $this->allowPrefix; 59 | } 60 | 61 | /** 62 | * 设置允许的号码段(手机号第二位) 63 | * @param array $allow 64 | * @return $this 65 | */ 66 | public function setAllowPrefix(array $allow = []) 67 | { 68 | if (isset($this->attributes['allow'])) { 69 | if (is_string($this->attributes['allow']) && strpos($this->attributes['allow'], ',')) { 70 | $this->allowPrefix = explode(',', $this->attributes['allow']); 71 | } elseif (is_array($this->attributes['allow'])) { 72 | $this->allowPrefix = $this->attributes['allow']; 73 | } 74 | } else { 75 | if (empty($allow)) { 76 | $allow = [3, 4, 5, 7, 8, 9]; 77 | } 78 | $this->allowPrefix = $allow; 79 | } 80 | return $this; 81 | } 82 | 83 | /** 84 | * 生成手机号码 85 | * @return string 86 | */ 87 | public function generate() 88 | { 89 | return $this->getPrefix() . str_pad(rand(0,99999999),8,0,STR_PAD_LEFT); 90 | } 91 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # think-generator 2 | 3 | **thinkphp6 随机生成手机号、身份证号、邮箱地址、昵称等测试数据** 4 | 5 | **特此申明:本类的初衷是生成测试数据,不可进行任何违法行为,不可进行任何违法行为,不可进行任何违法行为!!!** 6 | ## Installation 7 | 通过在composer.json中配置安装: 8 | ```php 9 | composer require dashingunique/think-generator 10 | ``` 11 | or 12 | ```php 13 | // composer.json 14 | composer install 15 | // composer update 16 | composer update 17 | ``` 18 | ## Usage 19 | ** 20 | 21 | ## 生成手机号码 22 | ** 23 | ```php 24 | $generator = (new Generator($this->app))->generator('mobile'); 25 | 26 | //随机生成一个手机号 27 | $generator->get(); //13611111111 28 | 29 | //随机生成一个号段为182的手机号 30 | $generator->prefix(182)->get();//18211111111 31 | 32 | //允许13,14,15,17,18,19号段的手机号生成(从中生成一个号码段) 33 | $generator->allow([3, 4, 5, 7, 8, 9])->get();//13011111111 34 | 35 | //获取多个手机号 36 | $generator->limit(10)->get(); 37 | 38 | //若同时存在prefix 和 allow prefix强制覆盖allow 39 | $generator->prefix(182)->allow([3, 4, 5, 7, 8, 9])->limit(10)->get();//18211111111 40 | 41 | ``` 42 | 43 | ## 生成邮箱地址 44 | ** 45 | ```php 46 | $generator = (new Generator($this->app))->generator('email'); 47 | 48 | //随机生成一个邮箱地址 49 | $generator->get();//12345678@qq.com 50 | 51 | //随机生成一个前缀为123456789的邮箱 52 | $generator->prefix(123456789)->get();//123456789@163.com 53 | 54 | //随机生成一个后缀为@qq.com的邮箱 55 | $generator->suffix('@qq.com')->get();//12345678@qq.com 56 | 57 | //生成一个指定长度的邮箱地址 58 | $generator->length(6)->get();//123456@qq.com 59 | 60 | //获取多个邮箱 61 | $generator->limit(10)->get(); 62 | 63 | ``` 64 | 65 | ### 生成身份证号码 66 | ```php 67 | $generator = (new Generator($this->app))->generator('identity'); 68 | 69 | //随机生成一个身份证号码 70 | $generator->get(); 71 | 72 | //随机生成一个指定性别的身份证号码(1男性 2女性) 73 | $generator->sex(1)->get(); 74 | 75 | //随机生成一个北京市的身份证号码 76 | $generator->province('北京市')->get(); 77 | 78 | //随机生成一个省份城市的身份证号码 79 | $generator->city('成都市')->get(); 80 | 81 | //随机生成一个地区的身份证号码 82 | $generator->city('高新区')->get(); 83 | 84 | //随机生成一个指定出生日期的身份证号码 85 | $generator->birthday('2000-01-01')->get(); 86 | 87 | //获取多个身份证号码 88 | $generator->limit(10)->get(); 89 | 90 | ``` 91 | 92 | ## 生成昵称 93 | ```php 94 | $generator = (new Generator($this->app))->generator('nickname'); 95 | 96 | //随机生成一个用户昵称 97 | $generator->get(); 98 | 99 | //随机生成一个指定姓氏的用户昵称 100 | $generator->surname('张')->get();//张三 101 | 102 | //随机生成一个指定姓氏类型的用户昵称(1单姓 2复姓) 103 | $generator->compound(2)->get();//上官三 104 | 105 | //随机生成一个指定性别的用户昵称(1男性 2女性) 106 | $generator->sex(2)->get();//张美 107 | 108 | //获取一个指定长度的用户昵称 109 | $generator->length(3)->get();//张大麻子 110 | 111 | //获取多个用户昵称 112 | $generator->limit(10)->get(); 113 | 114 | ``` 115 | 116 | 117 | 118 | ``` 119 | 120 | 121 | 122 | 123 | ## 后续 124 | 增加银行卡号的生成 125 | 验证生成的数据为一性 126 | 增加数据驱动类型:本地文件、Redis、数据库 127 | -------------------------------------------------------------------------------- /src/generator/BaseUtil.php: -------------------------------------------------------------------------------- 1 | = self::MAX) ? self::MAX : $limit; 43 | $this->limit = $limit; 44 | 45 | return $this; 46 | } 47 | 48 | /** 49 | * @return mixed 50 | */ 51 | public function getLimit() 52 | { 53 | return $this->limit; 54 | } 55 | 56 | /** 57 | * 获取生成的省份证号码 58 | * @return array|string 59 | */ 60 | public function get() 61 | { 62 | $limit = $this->getLimit(); 63 | if ($limit > 1) { 64 | $data = []; 65 | for ($i = 0; $i < $this->getLimit(); $i++) { 66 | $data[] = $this->generate(); 67 | } 68 | return $data; 69 | } else { 70 | return $this->generate(); 71 | } 72 | } 73 | 74 | /** 75 | * @return mixed 生成信息 76 | */ 77 | public abstract function generate(); 78 | 79 | /** 80 | * @param $name 81 | * @param $arguments 82 | * @return $this 83 | */ 84 | public function __call($name, $arguments) 85 | { 86 | if (!is_null($arguments) && isset($arguments[0])) { 87 | $this->setAttributes($name, $arguments[0]); 88 | } 89 | return $this; 90 | } 91 | 92 | /** 93 | * @param $key 94 | * @param $value 95 | * @return $this 96 | */ 97 | protected function setAttributes($key, $value) 98 | { 99 | if ($this->isPadding($key)) { 100 | $this->attributes[$key] = $value; 101 | } 102 | return $this; 103 | } 104 | 105 | /** 106 | * 是否是额外参数 107 | * @param $value 108 | * @return bool 109 | */ 110 | public function isPadding($value): bool 111 | { 112 | if (in_array($value, $this->getPadding())) { 113 | return false; 114 | } 115 | return true; 116 | } 117 | 118 | /** 119 | * @return array 120 | */ 121 | public function getPadding(): array 122 | { 123 | return $this->padding; 124 | } 125 | 126 | /** 127 | * 获取性别信息 128 | * @return float|int 129 | */ 130 | public function getSex() 131 | { 132 | $this->setSex(); 133 | return $this->sex; 134 | } 135 | 136 | /** 137 | * 设置性别 138 | * @return $this 139 | */ 140 | protected function setSex() 141 | { 142 | // sex is null , random 1 - 8 143 | if (!isset($this->attributes['sex'])) { 144 | $sex = random_int(1, 8); 145 | } elseif ($this->attributes['sex'] == self::MALE) { 146 | // sex is male 147 | $sex = 2 * random_int(1, 4) - 1; 148 | } else { 149 | // sex is female 150 | $sex = 2 * random_int(1, 4); 151 | } 152 | $this->sex = $sex; 153 | return $this; 154 | } 155 | } 156 | -------------------------------------------------------------------------------- /src/generator/util/Nickname.php: -------------------------------------------------------------------------------- 1 | 4 | * +---------------------------------------------------------------------- 5 | * | Description: 名称生成器 6 | * +---------------------------------------------------------------------- 7 | */ 8 | 9 | namespace dashing\generator\util; 10 | 11 | use dashing\generator\BaseUtil; 12 | 13 | class Nickname extends BaseUtil 14 | { 15 | /** 16 | * @var string 姓氏 17 | */ 18 | protected $surname; 19 | 20 | /** 21 | * @var string 名字 22 | */ 23 | protected $lastName; 24 | 25 | /** 26 | * @var int 姓氏类型:1单姓 2复姓 27 | */ 28 | protected $compound; 29 | 30 | /** 31 | * @var int 名长 32 | */ 33 | protected $nameLength; 34 | 35 | /** 36 | * 获取复姓长度 37 | * @return int 38 | */ 39 | public function getCompound() 40 | { 41 | if (isset($this->attributes['compound']) && $this->attributes['compound'] <= 2) { 42 | $this->compound = $this->attributes['compound']; 43 | } else { 44 | $this->compound = mt_rand(1, 2); 45 | } 46 | return $this->compound; 47 | } 48 | 49 | /** 50 | * @return string 51 | */ 52 | public function getSurname() 53 | { 54 | $this->setSurname(); 55 | return $this->surname; 56 | } 57 | 58 | /** 59 | * @return $this 60 | */ 61 | public function setSurname() 62 | { 63 | if (isset($this->attributes['surname'])) { 64 | $this->surname = $this->attributes['surname']; 65 | } else { 66 | $file = file_get_contents(generatorPath().'/data/surname.json'); 67 | $surnameData = uniqueCollection(json_decode($file, true)); 68 | $surname = $surnameData->where('length', $this->getCompound())->random(); 69 | $this->surname = $surname['surname']; 70 | } 71 | return $this; 72 | } 73 | 74 | /** 75 | * 获取名字 76 | * @return string 77 | */ 78 | public function getName() 79 | { 80 | $this->setName(); 81 | return $this->lastName; 82 | } 83 | 84 | /** 85 | * @return Nickname 86 | */ 87 | protected function setSex(): Nickname 88 | { 89 | if (isset($this->attributes['sex'])) { 90 | $this->sex = $this->attributes['sex']; 91 | } else { 92 | $this->sex = mt_rand(self::MALE, self::FEMALE); 93 | } 94 | return $this; 95 | } 96 | 97 | /** 98 | * 设置名字信息 99 | * @return $this 100 | */ 101 | public function setName() 102 | { 103 | $file = file_get_contents(generatorPath().'/data/name.json'); 104 | $nameData = uniqueCollection(json_decode($file, true)); 105 | $nameCollect = $nameData->where('sex', $this->getSex()); 106 | $name = ''; 107 | for ($i = 0; $i < $this->getLength(); $i++) { 108 | $nameItem = $nameCollect->random(); 109 | $name .= $nameItem['name']; 110 | } 111 | $this->lastName = $name; 112 | return $this; 113 | } 114 | 115 | /** 116 | * 获取名字长度 117 | * @return $this 118 | */ 119 | public function getLength() 120 | { 121 | if (isset($this->attributes['length'])) { 122 | $this->nameLength = $this->attributes['length']; 123 | } else { 124 | $this->nameLength = mt_rand(1, 2); 125 | } 126 | return $this->nameLength; 127 | } 128 | 129 | /** 130 | * @return mixed 生成信息 131 | */ 132 | public function generate() 133 | { 134 | return $this->getSurname().$this->getName(); 135 | } 136 | } -------------------------------------------------------------------------------- /src/generator/util/Email.php: -------------------------------------------------------------------------------- 1 | 4 | * +---------------------------------------------------------------------- 5 | * | Description: 邮箱地址生成器 6 | * +---------------------------------------------------------------------- 7 | */ 8 | 9 | namespace dashing\generator\util; 10 | 11 | use dashing\generator\BaseUtil; 12 | use dashing\library\Collection; 13 | 14 | class Email extends BaseUtil 15 | { 16 | /** 17 | * @var string 邮箱前缀 18 | */ 19 | protected $prefix; 20 | 21 | // 字符集合 22 | protected $codeSet = '0123456789abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY'; 23 | 24 | // 位数 25 | protected $length = 8; 26 | 27 | /** 28 | * @var string[] 常用邮箱后缀 29 | */ 30 | protected $mailboxSuffix = [ 31 | '@qq.com', 32 | '@163.com', 33 | '@sina.com', 34 | '@sohu.com', 35 | '@gmail.com', 36 | '@yahoo.com', 37 | '@msn.com', 38 | '@hotmail.com', 39 | '@aol.com', 40 | '@ask.com', 41 | '@live.com', 42 | '@0355.net', 43 | '@163.net', 44 | '@263.net', 45 | '@3721.net', 46 | '@yeah.net', 47 | '@googlemail.com', 48 | '@mail.com', 49 | '@sina.com', 50 | '@21cn.com', 51 | '@yahoo.com.cn', 52 | '@etang.com', 53 | '@eyou.com', 54 | '@56.com', 55 | '@x.cn', 56 | '@chinaren.com', 57 | '@sogou.com', 58 | '@citiz.com' 59 | ]; 60 | 61 | /** 62 | * @var string 邮箱后缀 63 | */ 64 | protected $suffix; 65 | 66 | /** 67 | * 获取邮箱前缀 68 | * @return string 69 | */ 70 | public function getPrefix() 71 | { 72 | $this->setPrefix(); 73 | return $this->prefix; 74 | } 75 | 76 | /** 77 | * 设置邮箱前缀 78 | * @return $this 79 | */ 80 | public function setPrefix() 81 | { 82 | $regexp = "/^[a-zA-Z0-9]*$/"; 83 | if (isset($this->attributes['prefix']) && preg_match($regexp, $this->attributes['prefix'])) { 84 | $this->prefix = $this->attributes['prefix']; 85 | } else { 86 | $characters = str_split($this->codeSet); 87 | $prefix = ''; 88 | for ($i = 0; $i < $this->getLength(); $i++) { 89 | $value = $characters[rand(0, count($characters) - 1)]; 90 | if (empty($i) && empty($value)) { 91 | $prefix .= rand(1,9); 92 | } else { 93 | $prefix .= $value; 94 | } 95 | } 96 | $this->prefix = $prefix; 97 | } 98 | return $this; 99 | } 100 | 101 | /** 102 | * 获取邮箱前缀长度 103 | * @return mixed 104 | */ 105 | public function getLength() 106 | { 107 | if (isset($this->attributes['length'])) { 108 | $this->length = $this->attributes['length']; 109 | } 110 | return $this->length; 111 | } 112 | 113 | /** 114 | * 获取邮箱后缀 115 | * @return string 116 | */ 117 | public function getSuffix() 118 | { 119 | $this->setSuffix(); 120 | return $this->suffix; 121 | } 122 | 123 | /** 124 | * 设置邮箱后缀 125 | * @return $this 126 | */ 127 | public function setSuffix() 128 | { 129 | $mailboxSuffix = new Collection($this->mailboxSuffix); 130 | if (isset($this->attributes['suffix']) && in_array($this->attributes['suffix'], $mailboxSuffix->all())) { 131 | $this->suffix = $this->attributes['suffix']; 132 | } else { 133 | $this->suffix = $mailboxSuffix->random(); 134 | } 135 | return $this; 136 | } 137 | 138 | /** 139 | * @return mixed 生成信息 140 | */ 141 | public function generate() 142 | { 143 | return $this->getPrefix() . $this->getSuffix(); 144 | } 145 | } -------------------------------------------------------------------------------- /src/generator/util/Identity.php: -------------------------------------------------------------------------------- 1 | 4 | * +---------------------------------------------------------------------- 5 | * | Description: 身份证号码生成器 6 | * +---------------------------------------------------------------------- 7 | */ 8 | 9 | namespace dashing\generator\util; 10 | 11 | use dashing\generator\BaseUtil; 12 | use dashing\library\Collection; 13 | use InvalidArgumentException; 14 | 15 | class Identity extends BaseUtil 16 | { 17 | /** 18 | * 省份集合 19 | * @var Collection 20 | */ 21 | protected $region; 22 | 23 | /** 24 | * 城市集合 25 | * @var Collection 26 | */ 27 | protected $cities; 28 | 29 | /** 30 | * @var mixed 性别编号 31 | */ 32 | protected $sex; 33 | 34 | /** 35 | * @var string 生日编号 36 | */ 37 | protected $birthday; 38 | 39 | /** 40 | * @var mixed 省份 41 | */ 42 | protected $province; 43 | 44 | /** 45 | * @var mixed 市区 46 | */ 47 | protected $city; 48 | 49 | /** 50 | * @var array|Collection|mixed 51 | */ 52 | private $district; 53 | 54 | public function __construct() 55 | { 56 | parent::__construct(); 57 | $this->loadRegion(); 58 | } 59 | 60 | /** 61 | * 获取省份 62 | * @return array|bool|int|Collection|mixed 63 | */ 64 | public function getProvince() 65 | { 66 | $this->setProvince(); 67 | return $this->province; 68 | } 69 | 70 | /** 71 | * 获取城市 72 | * @return int|mixed 73 | * @throws \Exception 74 | */ 75 | public function getCity() 76 | { 77 | $this->setCity(); 78 | return $this->city; 79 | } 80 | 81 | /** 82 | * @return mixed 83 | * @throws \Exception 84 | */ 85 | public function getDistrict() 86 | { 87 | $this->setDistrict(); 88 | return $this->district; 89 | } 90 | 91 | /** 92 | * 获取生日日期编号 93 | * @return string 94 | */ 95 | protected function getBirthday() 96 | { 97 | $this->setBirthday(); 98 | return $this->birthday; 99 | } 100 | 101 | /** 102 | * 加载省份信息 103 | */ 104 | protected function loadRegion() 105 | { 106 | if (empty($this->region)) { 107 | $file = file_get_contents(generatorPath().'/data/region.json'); 108 | $this->region = uniqueCollection(json_decode($file, 109 | true)); 110 | } 111 | return $this; 112 | } 113 | 114 | /** 115 | * @return $this 116 | */ 117 | protected function setBirthday() 118 | { 119 | //random Datatime 120 | if (!isset($this->attributes['birthday'])) { 121 | $startDate = mktime(0, 0, 0, 1, 1, 1920); 122 | $year = date('Y'); 123 | $month = date('m'); 124 | $day = date('d'); 125 | $endDate = mktime(0, 0, 0, $month, $day, $year); 126 | $birth = mt_rand($startDate, $endDate); 127 | $datetime = date('Ymd', $birth); 128 | } else { 129 | list($year, $month, $day) = explode('-', $this->attributes['birthday']); 130 | if (!checkdate($month, $day, $year)) { 131 | throw new InvalidArgumentException('Invalided datetime'); 132 | } 133 | $datetime = $year.$month.$day; 134 | } 135 | $this->birthday = $datetime; 136 | return $this; 137 | } 138 | 139 | /** 140 | * 设置省份信息 141 | * @return $this 142 | */ 143 | protected function setProvince() 144 | { 145 | if (isset($this->attributes['province'])) { 146 | $province = $this->region->where('name', $this->attributes['province'])->where('level', 1)->first(); 147 | } else { 148 | $province = $this->region->where('level', 1)->random(); 149 | } 150 | $this->province = $province; 151 | return $this; 152 | } 153 | 154 | /** 155 | * 设置城市信息 156 | * @return $this 157 | */ 158 | protected function setCity() 159 | { 160 | $province = $this->getProvince(); 161 | try { 162 | $list = $this->region->where('parent_id', $province['id'])->where('level', 2); 163 | if (isset($this->attributes['city'])) { 164 | $city = $list->where('name', $this->attributes['city'])->first(); 165 | } else { 166 | $city = $list->random(); 167 | } 168 | } catch (\Exception $exception) { 169 | $city = $province; 170 | } 171 | $this->city = $city; 172 | return $this; 173 | } 174 | 175 | /** 176 | * 设置区域信息 177 | * @return $this 178 | * @throws \Exception 179 | */ 180 | protected function setDistrict() 181 | { 182 | $city = $this->getCity(); 183 | try { 184 | $list = $this->region->where('parent_id', $city['id'])->where('level', 3); 185 | if (isset($this->attributes['district'])) { 186 | $district = $list->where('name', $this->attributes['district'])->first(); 187 | } else { 188 | $district = $list->random(); 189 | } 190 | } catch (\Exception $exception) { 191 | $district = $city; 192 | } 193 | $this->district = $district; 194 | return $this; 195 | } 196 | 197 | /** 198 | * 计算省份证最后一位 199 | * @param $base 200 | * @return string 201 | */ 202 | protected function getSuffixD($base) 203 | { 204 | if (strlen($base) <> 17) { 205 | die('Invalid Length'); 206 | } 207 | // 权重 208 | $factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; 209 | $sums = 0; 210 | for ($i = 0; $i < 17; $i++) { 211 | $sums += substr($base, $i, 1) * $factor[$i]; 212 | } 213 | 214 | $mods = $sums % 11; //10X98765432 215 | $return = ''; 216 | switch ($mods) { 217 | case 0: 218 | $return = '1'; 219 | break; 220 | case 1: 221 | $return = '0'; 222 | break; 223 | case 2: 224 | $return = 'X'; 225 | break; 226 | case 3: 227 | $return = '9'; 228 | break; 229 | case 4: 230 | $return = '8'; 231 | break; 232 | case 5: 233 | $return = '7'; 234 | break; 235 | case 6: 236 | $return = '6'; 237 | break; 238 | case 7: 239 | $return = '5'; 240 | break; 241 | case 8: 242 | $return = '4'; 243 | break; 244 | case 9: 245 | $return = '3'; 246 | break; 247 | case 10: 248 | $return = '2'; 249 | break; 250 | } 251 | return $return; 252 | } 253 | 254 | /** 255 | * 生成身份证号码 256 | * @return string 257 | */ 258 | public function generate() 259 | { 260 | $districtCode = $this->getDistrict()['adcode']; 261 | $baseCode = $districtCode.$this->getBirthday().mt_rand(0, 9).mt_rand(0, 9).$this->getSex(); 262 | return $baseCode.$this->getSuffixD($baseCode); 263 | } 264 | } -------------------------------------------------------------------------------- /src/generator/data/surname.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "surname": "\u8d75", 4 | "length": 1 5 | }, 6 | { 7 | "surname": "\u94b1", 8 | "length": 1 9 | }, 10 | { 11 | "surname": "\u5b59", 12 | "length": 1 13 | }, 14 | { 15 | "surname": "\u674e", 16 | "length": 1 17 | }, 18 | { 19 | "surname": "\u5468", 20 | "length": 1 21 | }, 22 | { 23 | "surname": "\u5434", 24 | "length": 1 25 | }, 26 | { 27 | "surname": "\u90d1", 28 | "length": 1 29 | }, 30 | { 31 | "surname": "\u738b", 32 | "length": 1 33 | }, 34 | { 35 | "surname": "\u51af", 36 | "length": 1 37 | }, 38 | { 39 | "surname": "\u9648", 40 | "length": 1 41 | }, 42 | { 43 | "surname": "\u696e", 44 | "length": 1 45 | }, 46 | { 47 | "surname": "\u536b", 48 | "length": 1 49 | }, 50 | { 51 | "surname": "\u848b", 52 | "length": 1 53 | }, 54 | { 55 | "surname": "\u6c88", 56 | "length": 1 57 | }, 58 | { 59 | "surname": "\u97e9", 60 | "length": 1 61 | }, 62 | { 63 | "surname": "\u6768", 64 | "length": 1 65 | }, 66 | { 67 | "surname": "\u6731", 68 | "length": 1 69 | }, 70 | { 71 | "surname": "\u79e6", 72 | "length": 1 73 | }, 74 | { 75 | "surname": "\u5c24", 76 | "length": 1 77 | }, 78 | { 79 | "surname": "\u8bb8", 80 | "length": 1 81 | }, 82 | { 83 | "surname": "\u4f55", 84 | "length": 1 85 | }, 86 | { 87 | "surname": "\u5415", 88 | "length": 1 89 | }, 90 | { 91 | "surname": "\u65bd", 92 | "length": 1 93 | }, 94 | { 95 | "surname": "\u5f20", 96 | "length": 1 97 | }, 98 | { 99 | "surname": "\u5b54", 100 | "length": 1 101 | }, 102 | { 103 | "surname": "\u66f9", 104 | "length": 1 105 | }, 106 | { 107 | "surname": "\u4e25", 108 | "length": 1 109 | }, 110 | { 111 | "surname": "\u534e", 112 | "length": 1 113 | }, 114 | { 115 | "surname": "\u91d1", 116 | "length": 1 117 | }, 118 | { 119 | "surname": "\u9b4f", 120 | "length": 1 121 | }, 122 | { 123 | "surname": "\u9676", 124 | "length": 1 125 | }, 126 | { 127 | "surname": "\u59dc", 128 | "length": 1 129 | }, 130 | { 131 | "surname": "\u621a", 132 | "length": 1 133 | }, 134 | { 135 | "surname": "\u8c22", 136 | "length": 1 137 | }, 138 | { 139 | "surname": "\u90b9", 140 | "length": 1 141 | }, 142 | { 143 | "surname": "\u55bb", 144 | "length": 1 145 | }, 146 | { 147 | "surname": "\u67cf", 148 | "length": 1 149 | }, 150 | { 151 | "surname": "\u6c34", 152 | "length": 1 153 | }, 154 | { 155 | "surname": "\u7aa6", 156 | "length": 1 157 | }, 158 | { 159 | "surname": "\u7ae0", 160 | "length": 1 161 | }, 162 | { 163 | "surname": "\u4e91", 164 | "length": 1 165 | }, 166 | { 167 | "surname": "\u82cf", 168 | "length": 1 169 | }, 170 | { 171 | "surname": "\u6f58", 172 | "length": 1 173 | }, 174 | { 175 | "surname": "\u845b", 176 | "length": 1 177 | }, 178 | { 179 | "surname": "\u595a", 180 | "length": 1 181 | }, 182 | { 183 | "surname": "\u8303", 184 | "length": 1 185 | }, 186 | { 187 | "surname": "\u5f6d", 188 | "length": 1 189 | }, 190 | { 191 | "surname": "\u90ce", 192 | "length": 1 193 | }, 194 | { 195 | "surname": "\u9c81", 196 | "length": 1 197 | }, 198 | { 199 | "surname": "\u97e6", 200 | "length": 1 201 | }, 202 | { 203 | "surname": "\u660c", 204 | "length": 1 205 | }, 206 | { 207 | "surname": "\u9a6c", 208 | "length": 1 209 | }, 210 | { 211 | "surname": "\u82d7", 212 | "length": 1 213 | }, 214 | { 215 | "surname": "\u51e4", 216 | "length": 1 217 | }, 218 | { 219 | "surname": "\u82b1", 220 | "length": 1 221 | }, 222 | { 223 | "surname": "\u65b9", 224 | "length": 1 225 | }, 226 | { 227 | "surname": "\u4fde", 228 | "length": 1 229 | }, 230 | { 231 | "surname": "\u4efb", 232 | "length": 1 233 | }, 234 | { 235 | "surname": "\u8881", 236 | "length": 1 237 | }, 238 | { 239 | "surname": "\u67f3", 240 | "length": 1 241 | }, 242 | { 243 | "surname": "\u9146", 244 | "length": 1 245 | }, 246 | { 247 | "surname": "\u9c8d", 248 | "length": 1 249 | }, 250 | { 251 | "surname": "\u53f2", 252 | "length": 1 253 | }, 254 | { 255 | "surname": "\u5510", 256 | "length": 1 257 | }, 258 | { 259 | "surname": "\u8d39", 260 | "length": 1 261 | }, 262 | { 263 | "surname": "\u5ec9", 264 | "length": 1 265 | }, 266 | { 267 | "surname": "\u5c91", 268 | "length": 1 269 | }, 270 | { 271 | "surname": "\u859b", 272 | "length": 1 273 | }, 274 | { 275 | "surname": "\u96f7", 276 | "length": 1 277 | }, 278 | { 279 | "surname": "\u8d3a", 280 | "length": 1 281 | }, 282 | { 283 | "surname": "\u502a", 284 | "length": 1 285 | }, 286 | { 287 | "surname": "\u6c64", 288 | "length": 1 289 | }, 290 | { 291 | "surname": "\u6ed5", 292 | "length": 1 293 | }, 294 | { 295 | "surname": "\u6bb7", 296 | "length": 1 297 | }, 298 | { 299 | "surname": "\u7f57", 300 | "length": 1 301 | }, 302 | { 303 | "surname": "\u6bd5", 304 | "length": 1 305 | }, 306 | { 307 | "surname": "\u90dd", 308 | "length": 1 309 | }, 310 | { 311 | "surname": "\u90ac", 312 | "length": 1 313 | }, 314 | { 315 | "surname": "\u5b89", 316 | "length": 1 317 | }, 318 | { 319 | "surname": "\u5e38", 320 | "length": 1 321 | }, 322 | { 323 | "surname": "\u4e50", 324 | "length": 1 325 | }, 326 | { 327 | "surname": "\u4e8e", 328 | "length": 1 329 | }, 330 | { 331 | "surname": "\u65f6", 332 | "length": 1 333 | }, 334 | { 335 | "surname": "\u5085", 336 | "length": 1 337 | }, 338 | { 339 | "surname": "\u76ae", 340 | "length": 1 341 | }, 342 | { 343 | "surname": "\u535e", 344 | "length": 1 345 | }, 346 | { 347 | "surname": "\u9f50", 348 | "length": 1 349 | }, 350 | { 351 | "surname": "\u5eb7", 352 | "length": 1 353 | }, 354 | { 355 | "surname": "\u4f0d", 356 | "length": 1 357 | }, 358 | { 359 | "surname": "\u4f59", 360 | "length": 1 361 | }, 362 | { 363 | "surname": "\u5143", 364 | "length": 1 365 | }, 366 | { 367 | "surname": "\u535c", 368 | "length": 1 369 | }, 370 | { 371 | "surname": "\u987e", 372 | "length": 1 373 | }, 374 | { 375 | "surname": "\u5b5f", 376 | "length": 1 377 | }, 378 | { 379 | "surname": "\u5e73", 380 | "length": 1 381 | }, 382 | { 383 | "surname": "\u9ec4", 384 | "length": 1 385 | }, 386 | { 387 | "surname": "\u548c", 388 | "length": 1 389 | }, 390 | { 391 | "surname": "\u7a46", 392 | "length": 1 393 | }, 394 | { 395 | "surname": "\u8427", 396 | "length": 1 397 | }, 398 | { 399 | "surname": "\u5c39", 400 | "length": 1 401 | }, 402 | { 403 | "surname": "\u59da", 404 | "length": 1 405 | }, 406 | { 407 | "surname": "\u90b5", 408 | "length": 1 409 | }, 410 | { 411 | "surname": "\u6e5b", 412 | "length": 1 413 | }, 414 | { 415 | "surname": "\u6c6a", 416 | "length": 1 417 | }, 418 | { 419 | "surname": "\u7941", 420 | "length": 1 421 | }, 422 | { 423 | "surname": "\u6bdb", 424 | "length": 1 425 | }, 426 | { 427 | "surname": "\u79b9", 428 | "length": 1 429 | }, 430 | { 431 | "surname": "\u72c4", 432 | "length": 1 433 | }, 434 | { 435 | "surname": "\u7c73", 436 | "length": 1 437 | }, 438 | { 439 | "surname": "\u8d1d", 440 | "length": 1 441 | }, 442 | { 443 | "surname": "\u660e", 444 | "length": 1 445 | }, 446 | { 447 | "surname": "\u81e7", 448 | "length": 1 449 | }, 450 | { 451 | "surname": "\u8ba1", 452 | "length": 1 453 | }, 454 | { 455 | "surname": "\u4f0f", 456 | "length": 1 457 | }, 458 | { 459 | "surname": "\u6210", 460 | "length": 1 461 | }, 462 | { 463 | "surname": "\u6234", 464 | "length": 1 465 | }, 466 | { 467 | "surname": "\u8c08", 468 | "length": 1 469 | }, 470 | { 471 | "surname": "\u5b8b", 472 | "length": 1 473 | }, 474 | { 475 | "surname": "\u8305", 476 | "length": 1 477 | }, 478 | { 479 | "surname": "\u5e9e", 480 | "length": 1 481 | }, 482 | { 483 | "surname": "\u718a", 484 | "length": 1 485 | }, 486 | { 487 | "surname": "\u7eaa", 488 | "length": 1 489 | }, 490 | { 491 | "surname": "\u8212", 492 | "length": 1 493 | }, 494 | { 495 | "surname": "\u5c48", 496 | "length": 1 497 | }, 498 | { 499 | "surname": "\u9879", 500 | "length": 1 501 | }, 502 | { 503 | "surname": "\u795d", 504 | "length": 1 505 | }, 506 | { 507 | "surname": "\u8463", 508 | "length": 1 509 | }, 510 | { 511 | "surname": "\u6881", 512 | "length": 1 513 | }, 514 | { 515 | "surname": "\u675c", 516 | "length": 1 517 | }, 518 | { 519 | "surname": "\u962e", 520 | "length": 1 521 | }, 522 | { 523 | "surname": "\u84dd", 524 | "length": 1 525 | }, 526 | { 527 | "surname": "\u95fd", 528 | "length": 1 529 | }, 530 | { 531 | "surname": "\u5e2d", 532 | "length": 1 533 | }, 534 | { 535 | "surname": "\u5b63", 536 | "length": 1 537 | }, 538 | { 539 | "surname": "\u9ebb", 540 | "length": 1 541 | }, 542 | { 543 | "surname": "\u5f3a", 544 | "length": 1 545 | }, 546 | { 547 | "surname": "\u8d3e", 548 | "length": 1 549 | }, 550 | { 551 | "surname": "\u8def", 552 | "length": 1 553 | }, 554 | { 555 | "surname": "\u5a04", 556 | "length": 1 557 | }, 558 | { 559 | "surname": "\u5371", 560 | "length": 1 561 | }, 562 | { 563 | "surname": "\u6c5f", 564 | "length": 1 565 | }, 566 | { 567 | "surname": "\u7ae5", 568 | "length": 1 569 | }, 570 | { 571 | "surname": "\u989c", 572 | "length": 1 573 | }, 574 | { 575 | "surname": "\u90ed", 576 | "length": 1 577 | }, 578 | { 579 | "surname": "\u6885", 580 | "length": 1 581 | }, 582 | { 583 | "surname": "\u76db", 584 | "length": 1 585 | }, 586 | { 587 | "surname": "\u6797", 588 | "length": 1 589 | }, 590 | { 591 | "surname": "\u5201", 592 | "length": 1 593 | }, 594 | { 595 | "surname": "\u953a", 596 | "length": 1 597 | }, 598 | { 599 | "surname": "\u5f90", 600 | "length": 1 601 | }, 602 | { 603 | "surname": "\u4e18", 604 | "length": 1 605 | }, 606 | { 607 | "surname": "\u9a86", 608 | "length": 1 609 | }, 610 | { 611 | "surname": "\u9ad8", 612 | "length": 1 613 | }, 614 | { 615 | "surname": "\u590f", 616 | "length": 1 617 | }, 618 | { 619 | "surname": "\u8521", 620 | "length": 1 621 | }, 622 | { 623 | "surname": "\u7530", 624 | "length": 1 625 | }, 626 | { 627 | "surname": "\u6a0a", 628 | "length": 1 629 | }, 630 | { 631 | "surname": "\u80e1", 632 | "length": 1 633 | }, 634 | { 635 | "surname": "\u51cc", 636 | "length": 1 637 | }, 638 | { 639 | "surname": "\u970d", 640 | "length": 1 641 | }, 642 | { 643 | "surname": "\u865e", 644 | "length": 1 645 | }, 646 | { 647 | "surname": "\u4e07", 648 | "length": 1 649 | }, 650 | { 651 | "surname": "\u652f", 652 | "length": 1 653 | }, 654 | { 655 | "surname": "\u67ef", 656 | "length": 1 657 | }, 658 | { 659 | "surname": "\u661d", 660 | "length": 1 661 | }, 662 | { 663 | "surname": "\u7ba1", 664 | "length": 1 665 | }, 666 | { 667 | "surname": "\u5362", 668 | "length": 1 669 | }, 670 | { 671 | "surname": "\u83ab", 672 | "length": 1 673 | }, 674 | { 675 | "surname": "\u7ecf", 676 | "length": 1 677 | }, 678 | { 679 | "surname": "\u623f", 680 | "length": 1 681 | }, 682 | { 683 | "surname": "\u88d8", 684 | "length": 1 685 | }, 686 | { 687 | "surname": "\u7f2a", 688 | "length": 1 689 | }, 690 | { 691 | "surname": "\u5e72", 692 | "length": 1 693 | }, 694 | { 695 | "surname": "\u89e3", 696 | "length": 1 697 | }, 698 | { 699 | "surname": "\u5e94", 700 | "length": 1 701 | }, 702 | { 703 | "surname": "\u5b97", 704 | "length": 1 705 | }, 706 | { 707 | "surname": "\u4e01", 708 | "length": 1 709 | }, 710 | { 711 | "surname": "\u5ba3", 712 | "length": 1 713 | }, 714 | { 715 | "surname": "\u8d32", 716 | "length": 1 717 | }, 718 | { 719 | "surname": "\u9093", 720 | "length": 1 721 | }, 722 | { 723 | "surname": "\u90c1", 724 | "length": 1 725 | }, 726 | { 727 | "surname": "\u5355", 728 | "length": 1 729 | }, 730 | { 731 | "surname": "\u676d", 732 | "length": 1 733 | }, 734 | { 735 | "surname": "\u6d2a", 736 | "length": 1 737 | }, 738 | { 739 | "surname": "\u5305", 740 | "length": 1 741 | }, 742 | { 743 | "surname": "\u8bf8", 744 | "length": 1 745 | }, 746 | { 747 | "surname": "\u5de6", 748 | "length": 1 749 | }, 750 | { 751 | "surname": "\u77f3", 752 | "length": 1 753 | }, 754 | { 755 | "surname": "\u5d14", 756 | "length": 1 757 | }, 758 | { 759 | "surname": "\u5409", 760 | "length": 1 761 | }, 762 | { 763 | "surname": "\u94ae", 764 | "length": 1 765 | }, 766 | { 767 | "surname": "\u9f9a", 768 | "length": 1 769 | }, 770 | { 771 | "surname": "\u7a0b", 772 | "length": 1 773 | }, 774 | { 775 | "surname": "\u5d47", 776 | "length": 1 777 | }, 778 | { 779 | "surname": "\u90a2", 780 | "length": 1 781 | }, 782 | { 783 | "surname": "\u6ed1", 784 | "length": 1 785 | }, 786 | { 787 | "surname": "\u88f4", 788 | "length": 1 789 | }, 790 | { 791 | "surname": "\u9646", 792 | "length": 1 793 | }, 794 | { 795 | "surname": "\u8363", 796 | "length": 1 797 | }, 798 | { 799 | "surname": "\u7fc1", 800 | "length": 1 801 | }, 802 | { 803 | "surname": "\u8340", 804 | "length": 1 805 | }, 806 | { 807 | "surname": "\u7f8a", 808 | "length": 1 809 | }, 810 | { 811 | "surname": "\u65bc", 812 | "length": 1 813 | }, 814 | { 815 | "surname": "\u60e0", 816 | "length": 1 817 | }, 818 | { 819 | "surname": "\u7504", 820 | "length": 1 821 | }, 822 | { 823 | "surname": "\u9eb9", 824 | "length": 1 825 | }, 826 | { 827 | "surname": "\u5bb6", 828 | "length": 1 829 | }, 830 | { 831 | "surname": "\u5c01", 832 | "length": 1 833 | }, 834 | { 835 | "surname": "\u82ae", 836 | "length": 1 837 | }, 838 | { 839 | "surname": "\u7fbf", 840 | "length": 1 841 | }, 842 | { 843 | "surname": "\u50a8", 844 | "length": 1 845 | }, 846 | { 847 | "surname": "\u9773", 848 | "length": 1 849 | }, 850 | { 851 | "surname": "\u6c72", 852 | "length": 1 853 | }, 854 | { 855 | "surname": "\u90b4", 856 | "length": 1 857 | }, 858 | { 859 | "surname": "\u7cdc", 860 | "length": 1 861 | }, 862 | { 863 | "surname": "\u677e", 864 | "length": 1 865 | }, 866 | { 867 | "surname": "\u4e95", 868 | "length": 1 869 | }, 870 | { 871 | "surname": "\u6bb5", 872 | "length": 1 873 | }, 874 | { 875 | "surname": "\u5bcc", 876 | "length": 1 877 | }, 878 | { 879 | "surname": "\u5deb", 880 | "length": 1 881 | }, 882 | { 883 | "surname": "\u4e4c", 884 | "length": 1 885 | }, 886 | { 887 | "surname": "\u7126", 888 | "length": 1 889 | }, 890 | { 891 | "surname": "\u5df4", 892 | "length": 1 893 | }, 894 | { 895 | "surname": "\u5f13", 896 | "length": 1 897 | }, 898 | { 899 | "surname": "\u7267", 900 | "length": 1 901 | }, 902 | { 903 | "surname": "\u9697", 904 | "length": 1 905 | }, 906 | { 907 | "surname": "\u5c71", 908 | "length": 1 909 | }, 910 | { 911 | "surname": "\u8c37", 912 | "length": 1 913 | }, 914 | { 915 | "surname": "\u8f66", 916 | "length": 1 917 | }, 918 | { 919 | "surname": "\u4faf", 920 | "length": 1 921 | }, 922 | { 923 | "surname": "\u5b93", 924 | "length": 1 925 | }, 926 | { 927 | "surname": "\u84ec", 928 | "length": 1 929 | }, 930 | { 931 | "surname": "\u5168", 932 | "length": 1 933 | }, 934 | { 935 | "surname": "\u90d7", 936 | "length": 1 937 | }, 938 | { 939 | "surname": "\u73ed", 940 | "length": 1 941 | }, 942 | { 943 | "surname": "\u4ef0", 944 | "length": 1 945 | }, 946 | { 947 | "surname": "\u79cb", 948 | "length": 1 949 | }, 950 | { 951 | "surname": "\u4ef2", 952 | "length": 1 953 | }, 954 | { 955 | "surname": "\u4f0a", 956 | "length": 1 957 | }, 958 | { 959 | "surname": "\u5bab", 960 | "length": 1 961 | }, 962 | { 963 | "surname": "\u5b81", 964 | "length": 1 965 | }, 966 | { 967 | "surname": "\u4ec7", 968 | "length": 1 969 | }, 970 | { 971 | "surname": "\u683e", 972 | "length": 1 973 | }, 974 | { 975 | "surname": "\u66b4", 976 | "length": 1 977 | }, 978 | { 979 | "surname": "\u7518", 980 | "length": 1 981 | }, 982 | { 983 | "surname": "\u659c", 984 | "length": 1 985 | }, 986 | { 987 | "surname": "\u5389", 988 | "length": 1 989 | }, 990 | { 991 | "surname": "\u620e", 992 | "length": 1 993 | }, 994 | { 995 | "surname": "\u7956", 996 | "length": 1 997 | }, 998 | { 999 | "surname": "\u6b66", 1000 | "length": 1 1001 | }, 1002 | { 1003 | "surname": "\u7b26", 1004 | "length": 1 1005 | }, 1006 | { 1007 | "surname": "\u5218", 1008 | "length": 1 1009 | }, 1010 | { 1011 | "surname": "\u666f", 1012 | "length": 1 1013 | }, 1014 | { 1015 | "surname": "\u8a79", 1016 | "length": 1 1017 | }, 1018 | { 1019 | "surname": "\u675f", 1020 | "length": 1 1021 | }, 1022 | { 1023 | "surname": "\u9f99", 1024 | "length": 1 1025 | }, 1026 | { 1027 | "surname": "\u53f6", 1028 | "length": 1 1029 | }, 1030 | { 1031 | "surname": "\u5e78", 1032 | "length": 1 1033 | }, 1034 | { 1035 | "surname": "\u53f8", 1036 | "length": 1 1037 | }, 1038 | { 1039 | "surname": "\u97f6", 1040 | "length": 1 1041 | }, 1042 | { 1043 | "surname": "\u90dc", 1044 | "length": 1 1045 | }, 1046 | { 1047 | "surname": "\u9ece", 1048 | "length": 1 1049 | }, 1050 | { 1051 | "surname": "\u84df", 1052 | "length": 1 1053 | }, 1054 | { 1055 | "surname": "\u8584", 1056 | "length": 1 1057 | }, 1058 | { 1059 | "surname": "\u5370", 1060 | "length": 1 1061 | }, 1062 | { 1063 | "surname": "\u5bbf", 1064 | "length": 1 1065 | }, 1066 | { 1067 | "surname": "\u767d", 1068 | "length": 1 1069 | }, 1070 | { 1071 | "surname": "\u6000", 1072 | "length": 1 1073 | }, 1074 | { 1075 | "surname": "\u84b2", 1076 | "length": 1 1077 | }, 1078 | { 1079 | "surname": "\u90b0", 1080 | "length": 1 1081 | }, 1082 | { 1083 | "surname": "\u4ece", 1084 | "length": 1 1085 | }, 1086 | { 1087 | "surname": "\u9102", 1088 | "length": 1 1089 | }, 1090 | { 1091 | "surname": "\u7d22", 1092 | "length": 1 1093 | }, 1094 | { 1095 | "surname": "\u54b8", 1096 | "length": 1 1097 | }, 1098 | { 1099 | "surname": "\u7c4d", 1100 | "length": 1 1101 | }, 1102 | { 1103 | "surname": "\u8d56", 1104 | "length": 1 1105 | }, 1106 | { 1107 | "surname": "\u5353", 1108 | "length": 1 1109 | }, 1110 | { 1111 | "surname": "\u853a", 1112 | "length": 1 1113 | }, 1114 | { 1115 | "surname": "\u5c60", 1116 | "length": 1 1117 | }, 1118 | { 1119 | "surname": "\u8499", 1120 | "length": 1 1121 | }, 1122 | { 1123 | "surname": "\u6c60", 1124 | "length": 1 1125 | }, 1126 | { 1127 | "surname": "\u4e54", 1128 | "length": 1 1129 | }, 1130 | { 1131 | "surname": "\u9634", 1132 | "length": 1 1133 | }, 1134 | { 1135 | "surname": "\u90c1", 1136 | "length": 1 1137 | }, 1138 | { 1139 | "surname": "\u80e5", 1140 | "length": 1 1141 | }, 1142 | { 1143 | "surname": "\u80fd", 1144 | "length": 1 1145 | }, 1146 | { 1147 | "surname": "\u82cd", 1148 | "length": 1 1149 | }, 1150 | { 1151 | "surname": "\u53cc", 1152 | "length": 1 1153 | }, 1154 | { 1155 | "surname": "\u95fb", 1156 | "length": 1 1157 | }, 1158 | { 1159 | "surname": "\u8398", 1160 | "length": 1 1161 | }, 1162 | { 1163 | "surname": "\u515a", 1164 | "length": 1 1165 | }, 1166 | { 1167 | "surname": "\u7fdf", 1168 | "length": 1 1169 | }, 1170 | { 1171 | "surname": "\u8c2d", 1172 | "length": 1 1173 | }, 1174 | { 1175 | "surname": "\u8d21", 1176 | "length": 1 1177 | }, 1178 | { 1179 | "surname": "\u52b3", 1180 | "length": 1 1181 | }, 1182 | { 1183 | "surname": "\u9004", 1184 | "length": 1 1185 | }, 1186 | { 1187 | "surname": "\u59ec", 1188 | "length": 1 1189 | }, 1190 | { 1191 | "surname": "\u7533", 1192 | "length": 1 1193 | }, 1194 | { 1195 | "surname": "\u6276", 1196 | "length": 1 1197 | }, 1198 | { 1199 | "surname": "\u5835", 1200 | "length": 1 1201 | }, 1202 | { 1203 | "surname": "\u5189", 1204 | "length": 1 1205 | }, 1206 | { 1207 | "surname": "\u5bb0", 1208 | "length": 1 1209 | }, 1210 | { 1211 | "surname": "\u90e6", 1212 | "length": 1 1213 | }, 1214 | { 1215 | "surname": "\u96cd", 1216 | "length": 1 1217 | }, 1218 | { 1219 | "surname": "\u90e4", 1220 | "length": 1 1221 | }, 1222 | { 1223 | "surname": "\u74a9", 1224 | "length": 1 1225 | }, 1226 | { 1227 | "surname": "\u6851", 1228 | "length": 1 1229 | }, 1230 | { 1231 | "surname": "\u6842", 1232 | "length": 1 1233 | }, 1234 | { 1235 | "surname": "\u6fee", 1236 | "length": 1 1237 | }, 1238 | { 1239 | "surname": "\u725b", 1240 | "length": 1 1241 | }, 1242 | { 1243 | "surname": "\u5bff", 1244 | "length": 1 1245 | }, 1246 | { 1247 | "surname": "\u901a", 1248 | "length": 1 1249 | }, 1250 | { 1251 | "surname": "\u8fb9", 1252 | "length": 1 1253 | }, 1254 | { 1255 | "surname": "\u6248", 1256 | "length": 1 1257 | }, 1258 | { 1259 | "surname": "\u71d5", 1260 | "length": 1 1261 | }, 1262 | { 1263 | "surname": "\u5180", 1264 | "length": 1 1265 | }, 1266 | { 1267 | "surname": "\u90cf", 1268 | "length": 1 1269 | }, 1270 | { 1271 | "surname": "\u6d66", 1272 | "length": 1 1273 | }, 1274 | { 1275 | "surname": "\u5c1a", 1276 | "length": 1 1277 | }, 1278 | { 1279 | "surname": "\u519c", 1280 | "length": 1 1281 | }, 1282 | { 1283 | "surname": "\u6e29", 1284 | "length": 1 1285 | }, 1286 | { 1287 | "surname": "\u522b", 1288 | "length": 1 1289 | }, 1290 | { 1291 | "surname": "\u5e84", 1292 | "length": 1 1293 | }, 1294 | { 1295 | "surname": "\u664f", 1296 | "length": 1 1297 | }, 1298 | { 1299 | "surname": "\u67f4", 1300 | "length": 1 1301 | }, 1302 | { 1303 | "surname": "\u77bf", 1304 | "length": 1 1305 | }, 1306 | { 1307 | "surname": "\u960e", 1308 | "length": 1 1309 | }, 1310 | { 1311 | "surname": "\u5145", 1312 | "length": 1 1313 | }, 1314 | { 1315 | "surname": "\u6155", 1316 | "length": 1 1317 | }, 1318 | { 1319 | "surname": "\u8fde", 1320 | "length": 1 1321 | }, 1322 | { 1323 | "surname": "\u8339", 1324 | "length": 1 1325 | }, 1326 | { 1327 | "surname": "\u4e60", 1328 | "length": 1 1329 | }, 1330 | { 1331 | "surname": "\u5ba6", 1332 | "length": 1 1333 | }, 1334 | { 1335 | "surname": "\u827e", 1336 | "length": 1 1337 | }, 1338 | { 1339 | "surname": "\u9c7c", 1340 | "length": 1 1341 | }, 1342 | { 1343 | "surname": "\u5bb9", 1344 | "length": 1 1345 | }, 1346 | { 1347 | "surname": "\u5411", 1348 | "length": 1 1349 | }, 1350 | { 1351 | "surname": "\u53e4", 1352 | "length": 1 1353 | }, 1354 | { 1355 | "surname": "\u6613", 1356 | "length": 1 1357 | }, 1358 | { 1359 | "surname": "\u614e", 1360 | "length": 1 1361 | }, 1362 | { 1363 | "surname": "\u6208", 1364 | "length": 1 1365 | }, 1366 | { 1367 | "surname": "\u5ed6", 1368 | "length": 1 1369 | }, 1370 | { 1371 | "surname": "\u5ebe", 1372 | "length": 1 1373 | }, 1374 | { 1375 | "surname": "\u7ec8", 1376 | "length": 1 1377 | }, 1378 | { 1379 | "surname": "\u66a8", 1380 | "length": 1 1381 | }, 1382 | { 1383 | "surname": "\u5c45", 1384 | "length": 1 1385 | }, 1386 | { 1387 | "surname": "\u8861", 1388 | "length": 1 1389 | }, 1390 | { 1391 | "surname": "\u6b65", 1392 | "length": 1 1393 | }, 1394 | { 1395 | "surname": "\u90fd", 1396 | "length": 1 1397 | }, 1398 | { 1399 | "surname": "\u803f", 1400 | "length": 1 1401 | }, 1402 | { 1403 | "surname": "\u6ee1", 1404 | "length": 1 1405 | }, 1406 | { 1407 | "surname": "\u5f18", 1408 | "length": 1 1409 | }, 1410 | { 1411 | "surname": "\u5321", 1412 | "length": 1 1413 | }, 1414 | { 1415 | "surname": "\u56fd", 1416 | "length": 1 1417 | }, 1418 | { 1419 | "surname": "\u6587", 1420 | "length": 1 1421 | }, 1422 | { 1423 | "surname": "\u5bc7", 1424 | "length": 1 1425 | }, 1426 | { 1427 | "surname": "\u5e7f", 1428 | "length": 1 1429 | }, 1430 | { 1431 | "surname": "\u7984", 1432 | "length": 1 1433 | }, 1434 | { 1435 | "surname": "\u9619", 1436 | "length": 1 1437 | }, 1438 | { 1439 | "surname": "\u4e1c", 1440 | "length": 1 1441 | }, 1442 | { 1443 | "surname": "\u6b27", 1444 | "length": 1 1445 | }, 1446 | { 1447 | "surname": "\u6bb3", 1448 | "length": 1 1449 | }, 1450 | { 1451 | "surname": "\u6c83", 1452 | "length": 1 1453 | }, 1454 | { 1455 | "surname": "\u5229", 1456 | "length": 1 1457 | }, 1458 | { 1459 | "surname": "\u851a", 1460 | "length": 1 1461 | }, 1462 | { 1463 | "surname": "\u8d8a", 1464 | "length": 1 1465 | }, 1466 | { 1467 | "surname": "\u5914", 1468 | "length": 1 1469 | }, 1470 | { 1471 | "surname": "\u9686", 1472 | "length": 1 1473 | }, 1474 | { 1475 | "surname": "\u5e08", 1476 | "length": 1 1477 | }, 1478 | { 1479 | "surname": "\u5de9", 1480 | "length": 1 1481 | }, 1482 | { 1483 | "surname": "\u538d", 1484 | "length": 1 1485 | }, 1486 | { 1487 | "surname": "\u8042", 1488 | "length": 1 1489 | }, 1490 | { 1491 | "surname": "\u6641", 1492 | "length": 1 1493 | }, 1494 | { 1495 | "surname": "\u52fe", 1496 | "length": 1 1497 | }, 1498 | { 1499 | "surname": "\u6556", 1500 | "length": 1 1501 | }, 1502 | { 1503 | "surname": "\u878d", 1504 | "length": 1 1505 | }, 1506 | { 1507 | "surname": "\u51b7", 1508 | "length": 1 1509 | }, 1510 | { 1511 | "surname": "\u8a3e", 1512 | "length": 1 1513 | }, 1514 | { 1515 | "surname": "\u8f9b", 1516 | "length": 1 1517 | }, 1518 | { 1519 | "surname": "\u961a", 1520 | "length": 1 1521 | }, 1522 | { 1523 | "surname": "\u90a3", 1524 | "length": 1 1525 | }, 1526 | { 1527 | "surname": "\u7b80", 1528 | "length": 1 1529 | }, 1530 | { 1531 | "surname": "\u9976", 1532 | "length": 1 1533 | }, 1534 | { 1535 | "surname": "\u7a7a", 1536 | "length": 1 1537 | }, 1538 | { 1539 | "surname": "\u66fe", 1540 | "length": 1 1541 | }, 1542 | { 1543 | "surname": "\u6bcb", 1544 | "length": 1 1545 | }, 1546 | { 1547 | "surname": "\u6c99", 1548 | "length": 1 1549 | }, 1550 | { 1551 | "surname": "\u4e5c", 1552 | "length": 1 1553 | }, 1554 | { 1555 | "surname": "\u517b", 1556 | "length": 1 1557 | }, 1558 | { 1559 | "surname": "\u97a0", 1560 | "length": 1 1561 | }, 1562 | { 1563 | "surname": "\u987b", 1564 | "length": 1 1565 | }, 1566 | { 1567 | "surname": "\u4e30", 1568 | "length": 1 1569 | }, 1570 | { 1571 | "surname": "\u5de2", 1572 | "length": 1 1573 | }, 1574 | { 1575 | "surname": "\u5173", 1576 | "length": 1 1577 | }, 1578 | { 1579 | "surname": "\u84af", 1580 | "length": 1 1581 | }, 1582 | { 1583 | "surname": "\u76f8", 1584 | "length": 1 1585 | }, 1586 | { 1587 | "surname": "\u67e5", 1588 | "length": 1 1589 | }, 1590 | { 1591 | "surname": "\u540e", 1592 | "length": 1 1593 | }, 1594 | { 1595 | "surname": "\u8346", 1596 | "length": 1 1597 | }, 1598 | { 1599 | "surname": "\u7ea2", 1600 | "length": 1 1601 | }, 1602 | { 1603 | "surname": "\u6e38", 1604 | "length": 1 1605 | }, 1606 | { 1607 | "surname": "\u7afa", 1608 | "length": 1 1609 | }, 1610 | { 1611 | "surname": "\u6743", 1612 | "length": 1 1613 | }, 1614 | { 1615 | "surname": "\u9011", 1616 | "length": 1 1617 | }, 1618 | { 1619 | "surname": "\u76d6", 1620 | "length": 1 1621 | }, 1622 | { 1623 | "surname": "\u76ca", 1624 | "length": 1 1625 | }, 1626 | { 1627 | "surname": "\u6853", 1628 | "length": 1 1629 | }, 1630 | { 1631 | "surname": "\u516c", 1632 | "length": 1 1633 | }, 1634 | { 1635 | "surname": "\u664b", 1636 | "length": 1 1637 | }, 1638 | { 1639 | "surname": "\u695a", 1640 | "length": 1 1641 | }, 1642 | { 1643 | "surname": "\u960e", 1644 | "length": 1 1645 | }, 1646 | { 1647 | "surname": "\u6cd5", 1648 | "length": 1 1649 | }, 1650 | { 1651 | "surname": "\u6c5d", 1652 | "length": 1 1653 | }, 1654 | { 1655 | "surname": "\u9122", 1656 | "length": 1 1657 | }, 1658 | { 1659 | "surname": "\u6d82", 1660 | "length": 1 1661 | }, 1662 | { 1663 | "surname": "\u94a6", 1664 | "length": 1 1665 | }, 1666 | { 1667 | "surname": "\u5cb3", 1668 | "length": 1 1669 | }, 1670 | { 1671 | "surname": "\u5e05", 1672 | "length": 1 1673 | }, 1674 | { 1675 | "surname": "\u7f11", 1676 | "length": 1 1677 | }, 1678 | { 1679 | "surname": "\u4ea2", 1680 | "length": 1 1681 | }, 1682 | { 1683 | "surname": "\u51b5", 1684 | "length": 1 1685 | }, 1686 | { 1687 | "surname": "\u540e", 1688 | "length": 1 1689 | }, 1690 | { 1691 | "surname": "\u6709", 1692 | "length": 1 1693 | }, 1694 | { 1695 | "surname": "\u7434", 1696 | "length": 1 1697 | }, 1698 | { 1699 | "surname": "\u5546", 1700 | "length": 1 1701 | }, 1702 | { 1703 | "surname": "\u725f", 1704 | "length": 1 1705 | }, 1706 | { 1707 | "surname": "\u4f58", 1708 | "length": 1 1709 | }, 1710 | { 1711 | "surname": "\u4f74", 1712 | "length": 1 1713 | }, 1714 | { 1715 | "surname": "\u4f2f", 1716 | "length": 1 1717 | }, 1718 | { 1719 | "surname": "\u8d4f", 1720 | "length": 1 1721 | }, 1722 | { 1723 | "surname": "\u58a8", 1724 | "length": 1 1725 | }, 1726 | { 1727 | "surname": "\u54c8", 1728 | "length": 1 1729 | }, 1730 | { 1731 | "surname": "\u8c2f", 1732 | "length": 1 1733 | }, 1734 | { 1735 | "surname": "\u7b2a", 1736 | "length": 1 1737 | }, 1738 | { 1739 | "surname": "\u5e74", 1740 | "length": 1 1741 | }, 1742 | { 1743 | "surname": "\u7231", 1744 | "length": 1 1745 | }, 1746 | { 1747 | "surname": "\u9633", 1748 | "length": 1 1749 | }, 1750 | { 1751 | "surname": "\u4f5f", 1752 | "length": 1 1753 | }, 1754 | { 1755 | "surname": "\u4e07\u4fdf", 1756 | "length": 2 1757 | }, 1758 | { 1759 | "surname": "\u53f8\u9a6c", 1760 | "length": 2 1761 | }, 1762 | { 1763 | "surname": "\u4e0a\u5b98", 1764 | "length": 2 1765 | }, 1766 | { 1767 | "surname": "\u6b27\u9633", 1768 | "length": 2 1769 | }, 1770 | { 1771 | "surname": "\u590f\u4faf", 1772 | "length": 2 1773 | }, 1774 | { 1775 | "surname": "\u8bf8\u845b", 1776 | "length": 2 1777 | }, 1778 | { 1779 | "surname": "\u95fb\u4eba", 1780 | "length": 2 1781 | }, 1782 | { 1783 | "surname": "\u4e1c\u65b9", 1784 | "length": 2 1785 | }, 1786 | { 1787 | "surname": "\u8d6b\u8fde", 1788 | "length": 2 1789 | }, 1790 | { 1791 | "surname": "\u7687\u752b", 1792 | "length": 2 1793 | }, 1794 | { 1795 | "surname": "\u5c09\u8fdf", 1796 | "length": 2 1797 | }, 1798 | { 1799 | "surname": "\u516c\u7f8a", 1800 | "length": 2 1801 | }, 1802 | { 1803 | "surname": "\u6fb9\u53f0", 1804 | "length": 2 1805 | }, 1806 | { 1807 | "surname": "\u516c\u51b6", 1808 | "length": 2 1809 | }, 1810 | { 1811 | "surname": "\u5b97\u653f", 1812 | "length": 2 1813 | }, 1814 | { 1815 | "surname": "\u6fee\u9633", 1816 | "length": 2 1817 | }, 1818 | { 1819 | "surname": "\u6df3\u4e8e", 1820 | "length": 2 1821 | }, 1822 | { 1823 | "surname": "\u5355\u4e8e", 1824 | "length": 2 1825 | }, 1826 | { 1827 | "surname": "\u592a\u53d4", 1828 | "length": 2 1829 | }, 1830 | { 1831 | "surname": "\u7533\u5c60", 1832 | "length": 2 1833 | }, 1834 | { 1835 | "surname": "\u516c\u5b59", 1836 | "length": 2 1837 | }, 1838 | { 1839 | "surname": "\u4ef2\u5b59", 1840 | "length": 2 1841 | }, 1842 | { 1843 | "surname": "\u8f69\u8f95", 1844 | "length": 2 1845 | }, 1846 | { 1847 | "surname": "\u4ee4\u72d0", 1848 | "length": 2 1849 | }, 1850 | { 1851 | "surname": "\u953a\u79bb", 1852 | "length": 2 1853 | }, 1854 | { 1855 | "surname": "\u5b87\u6587", 1856 | "length": 2 1857 | }, 1858 | { 1859 | "surname": "\u957f\u5b59", 1860 | "length": 2 1861 | }, 1862 | { 1863 | "surname": "\u6155\u5bb9", 1864 | "length": 2 1865 | }, 1866 | { 1867 | "surname": "\u9c9c\u4e8e", 1868 | "length": 2 1869 | }, 1870 | { 1871 | "surname": "\u95fe\u4e18", 1872 | "length": 2 1873 | }, 1874 | { 1875 | "surname": "\u53f8\u5f92", 1876 | "length": 2 1877 | }, 1878 | { 1879 | "surname": "\u53f8\u7a7a", 1880 | "length": 2 1881 | }, 1882 | { 1883 | "surname": "\u4e0c\u5b98", 1884 | "length": 2 1885 | }, 1886 | { 1887 | "surname": "\u53f8\u5bc7", 1888 | "length": 2 1889 | }, 1890 | { 1891 | "surname": "\u4ec9", 1892 | "length": 2 1893 | }, 1894 | { 1895 | "surname": "\u7763", 1896 | "length": 2 1897 | }, 1898 | { 1899 | "surname": "\u5b50\u8f66", 1900 | "length": 2 1901 | }, 1902 | { 1903 | "surname": "\u989b\u5b59", 1904 | "length": 2 1905 | }, 1906 | { 1907 | "surname": "\u7aef\u6728", 1908 | "length": 2 1909 | }, 1910 | { 1911 | "surname": "\u5deb\u9a6c", 1912 | "length": 2 1913 | }, 1914 | { 1915 | "surname": "\u516c\u897f", 1916 | "length": 2 1917 | }, 1918 | { 1919 | "surname": "\u6f06\u96d5", 1920 | "length": 2 1921 | }, 1922 | { 1923 | "surname": "\u4e50\u6b63", 1924 | "length": 2 1925 | }, 1926 | { 1927 | "surname": "\u58e4\u9a77", 1928 | "length": 2 1929 | }, 1930 | { 1931 | "surname": "\u516c\u826f", 1932 | "length": 2 1933 | }, 1934 | { 1935 | "surname": "\u62d3\u62d4", 1936 | "length": 2 1937 | }, 1938 | { 1939 | "surname": "\u5939\u8c37", 1940 | "length": 2 1941 | }, 1942 | { 1943 | "surname": "\u5bb0\u7236", 1944 | "length": 2 1945 | }, 1946 | { 1947 | "surname": "\u8c37\u6881", 1948 | "length": 2 1949 | }, 1950 | { 1951 | "surname": "\u6bb5\u5e72", 1952 | "length": 2 1953 | }, 1954 | { 1955 | "surname": "\u767e\u91cc", 1956 | "length": 2 1957 | }, 1958 | { 1959 | "surname": "\u4e1c\u90ed", 1960 | "length": 2 1961 | }, 1962 | { 1963 | "surname": "\u5357\u95e8", 1964 | "length": 2 1965 | }, 1966 | { 1967 | "surname": "\u547c\u5ef6", 1968 | "length": 2 1969 | }, 1970 | { 1971 | "surname": "\u5f52", 1972 | "length": 2 1973 | }, 1974 | { 1975 | "surname": "\u6d77", 1976 | "length": 2 1977 | }, 1978 | { 1979 | "surname": "\u7f8a\u820c", 1980 | "length": 2 1981 | }, 1982 | { 1983 | "surname": "\u5fae\u751f", 1984 | "length": 2 1985 | }, 1986 | { 1987 | "surname": "\u6881\u4e18", 1988 | "length": 2 1989 | }, 1990 | { 1991 | "surname": "\u5de6\u4e18", 1992 | "length": 2 1993 | }, 1994 | { 1995 | "surname": "\u4e1c\u95e8", 1996 | "length": 2 1997 | }, 1998 | { 1999 | "surname": "\u897f\u95e8", 2000 | "length": 2 2001 | }, 2002 | { 2003 | "surname": "\u5357\u5bab", 2004 | "length": 2 2005 | } 2006 | ] --------------------------------------------------------------------------------