├── .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 |
5 |
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 | ]
--------------------------------------------------------------------------------