| 148 |
lars |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
namespace Faker\Provider\zh_TW;
|
|
|
4 |
|
|
|
5 |
class Person extends \Faker\Provider\Person
|
|
|
6 |
{
|
|
|
7 |
/**
|
|
|
8 |
* @see https://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89
|
|
|
9 |
*/
|
|
|
10 |
public static $idBirthplaceCode = [
|
|
|
11 |
'A' => 10,
|
|
|
12 |
'B' => 11,
|
|
|
13 |
'C' => 12,
|
|
|
14 |
'D' => 13,
|
|
|
15 |
'E' => 14,
|
|
|
16 |
'F' => 15,
|
|
|
17 |
'G' => 16,
|
|
|
18 |
'H' => 17,
|
|
|
19 |
'I' => 34,
|
|
|
20 |
'J' => 18,
|
|
|
21 |
'K' => 19,
|
|
|
22 |
'M' => 21,
|
|
|
23 |
'N' => 22,
|
|
|
24 |
'O' => 35,
|
|
|
25 |
'P' => 23,
|
|
|
26 |
'Q' => 24,
|
|
|
27 |
'T' => 27,
|
|
|
28 |
'U' => 28,
|
|
|
29 |
'V' => 29,
|
|
|
30 |
'W' => 32,
|
|
|
31 |
'X' => 30,
|
|
|
32 |
'Z' => 33,
|
|
|
33 |
];
|
|
|
34 |
|
|
|
35 |
/**
|
|
|
36 |
* @see https://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89
|
|
|
37 |
*/
|
|
|
38 |
public static $idDigitValidator = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1];
|
|
|
39 |
|
|
|
40 |
protected static $maleNameFormats = [
|
|
|
41 |
'{{lastName}}{{firstNameMale}}',
|
|
|
42 |
];
|
|
|
43 |
|
|
|
44 |
protected static $femaleNameFormats = [
|
|
|
45 |
'{{lastName}}{{firstNameFemale}}',
|
|
|
46 |
];
|
|
|
47 |
|
|
|
48 |
protected static $titleMale = ['先生', '博士', '教授'];
|
|
|
49 |
protected static $titleFemale = ['小姐', '太太', '博士', '教授'];
|
|
|
50 |
|
|
|
51 |
/**
|
|
|
52 |
* @see http://zh.wikipedia.org/wiki/%E7%99%BE%E5%AE%B6%E5%A7%93
|
|
|
53 |
*/
|
|
|
54 |
protected static $lastName = [
|
|
|
55 |
'趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '馮',
|
|
|
56 |
'陳', '褚', '衛', '蔣', '沈', '韓', '楊', '朱', '秦',
|
|
|
57 |
'尤', '許', '何', '呂', '施', '張', '孔', '曹', '嚴',
|
|
|
58 |
'華', '金', '魏', '陶', '姜', '戚', '謝', '鄒', '喻',
|
|
|
59 |
'柏', '水', '竇', '章', '雲', '蘇', '潘', '葛',
|
|
|
60 |
'奚', '范', '彭', '郎', '魯', '韋', '昌', '馬',
|
|
|
61 |
'苗', '鳳', '花', '方', '俞', '任', '袁', '柳',
|
|
|
62 |
'酆', '鮑', '史', '唐', '費', '廉', '岑', '薛',
|
|
|
63 |
'雷', '賀', '倪', '湯', '滕', '殷', '羅', '畢',
|
|
|
64 |
'郝', '鄔', '安', '常', '樂', '于', '時', '傅',
|
|
|
65 |
'皮', '卞', '齊', '康', '伍', '余', '元', '卜',
|
|
|
66 |
'顧', '孟', '平', '黃', '和', '穆', '蕭', '尹',
|
|
|
67 |
'姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄',
|
|
|
68 |
'米', '貝', '明', '臧', '計', '伏', '成', '戴',
|
|
|
69 |
'談', '宋', '茅', '龐', '熊', '紀', '舒', '屈',
|
|
|
70 |
'項', '祝', '董', '梁', '杜', '阮', '藍', '閔',
|
|
|
71 |
'席', '季', '麻', '強', '賈', '路', '婁', '危',
|
|
|
72 |
'江', '童', '顏', '郭', '梅', '盛', '林', '刁',
|
|
|
73 |
'鍾', '徐', '丘', '駱', '高', '夏', '蔡', '田',
|
|
|
74 |
'樊', '胡', '凌', '霍', '虞', '萬', '支', '柯',
|
|
|
75 |
'昝', '管', '盧', '莫', '經', '房', '裘', '繆',
|
|
|
76 |
'干', '解', '應', '宗', '丁', '宣', '賁', '鄧',
|
|
|
77 |
'郁', '單', '杭', '洪', '包', '諸', '左', '石',
|
|
|
78 |
'崔', '吉', '鈕', '龔', '程', '嵇', '邢', '滑',
|
|
|
79 |
'裴', '陸', '榮', '翁', '荀', '羊', '於', '惠',
|
|
|
80 |
'甄', '麴', 'å®¶', 'å°', '芮', '羿', '儲', 'é³',
|
|
|
81 |
'汲', '邴', '糜', '松', '井', '段', '富', '巫',
|
|
|
82 |
'烏', '焦', '巴', '弓', '牧', '隗', '山', '谷',
|
|
|
83 |
'車', '侯', '宓', '蓬', '全', '郗', '班', '仰',
|
|
|
84 |
'秋', '仲', '伊', '宮', '甯', '仇', '欒', '暴',
|
|
|
85 |
'甘', '鈄', '厲', '戎', '祖', '武', '符', '劉',
|
|
|
86 |
'景', '詹', '束', '龍', '葉', '幸', '司', '韶',
|
|
|
87 |
'郜', '黎', '薊', '薄', '印', '宿', '白', '懷',
|
|
|
88 |
'蒲', '邰', '從', '鄂', '索', '咸', '籍', '賴',
|
|
|
89 |
'卓', '藺', '屠', '蒙', '池', '喬', '陰', '鬱',
|
|
|
90 |
'胥', '能', '蒼', '雙', '聞', '莘', '黨', '翟',
|
|
|
91 |
'譚', '貢', '勞', '逄', '姬', '申', '扶', '堵',
|
|
|
92 |
'冉', '宰', '酈', '雍', '郤', '璩', '桑', '桂',
|
|
|
93 |
'濮', '牛', '壽', '通', '邊', '扈', '燕', '冀',
|
|
|
94 |
'郟', '浦', '尚', '農', '溫', '別', '莊', '晏',
|
|
|
95 |
'柴', '瞿', '閻', '充', '慕', '連', '茹', '習',
|
|
|
96 |
'宦', '艾', '魚', '容', '向', '古', '易', '慎',
|
|
|
97 |
'戈', '廖', '庾', '終', '暨', '居', '衡', '步',
|
|
|
98 |
'都', '耿', '滿', '弘', '匡', '國', '文', '寇',
|
|
|
99 |
'廣', '祿', '闕', '東', '歐', '殳', '沃', '利',
|
|
|
100 |
'蔚', '越', '夔', '隆', '師', '鞏', '厙', '聶',
|
|
|
101 |
'晁', '勾', '敖', '融', '冷', '訾', '辛', '闞',
|
|
|
102 |
'那', '簡', '饒', '空', '曾', '毋', '沙', '乜',
|
|
|
103 |
'養', '鞠', '須', '豐', '巢', '關', '蒯', '相',
|
|
|
104 |
'查', '后', '荊', '紅', '游', '竺', '權', '逯',
|
|
|
105 |
'蓋', '益', '桓', '公', '万俟', '司馬', '上官',
|
|
|
106 |
'歐陽', '夏侯', '諸葛', '聞人', '東方', '赫連',
|
|
|
107 |
'皇甫', '尉遲', '公羊', '澹臺', '公冶', '宗政',
|
|
|
108 |
'濮陽', '淳于', '單于', '太叔', '申屠', '公孫',
|
|
|
109 |
'仲孫', '軒轅', '令狐', '鍾離', '宇文', '長孫',
|
|
|
110 |
'慕容', '鮮于', '閭丘', '司徒', '司空', '亓官',
|
|
|
111 |
'司寇', '仉', '督', '子車', '顓孫', '端木', '巫馬',
|
|
|
112 |
'公西', '漆雕', '樂正', '壤駟', '公良', '拓跋',
|
|
|
113 |
'夾谷', '宰父', '穀梁', '晉', '楚', '閆', '法',
|
|
|
114 |
'汝', '鄢', '涂', '欽', '段干', '百里', '東郭',
|
|
|
115 |
'南門', '呼延', '歸', '海', '羊舌', '微生', '岳',
|
|
|
116 |
'帥', '緱', '亢', '況', '後', '有', '琴', '梁丘',
|
|
|
117 |
'左丘', '東門', '西門', '商', '牟', '佘', '佴',
|
|
|
118 |
'伯', '賞', '南宮', '墨', '哈', '譙', '笪', '年',
|
|
|
119 |
'愛', '陽', '佟', '第五', '言', '福',
|
|
|
120 |
];
|
|
|
121 |
|
|
|
122 |
/**
|
|
|
123 |
* @see http://technology.chtsai.org/namefreq/
|
|
|
124 |
*/
|
|
|
125 |
protected static $characterMale = [
|
|
|
126 |
'佳', '俊', '信', '偉', '傑', '冠', '君', '哲',
|
|
|
127 |
'嘉', '威', '宇', '安', '宏', '宗', '宜', '家',
|
|
|
128 |
'庭', '廷', '建', '彥', '心', '志', '思', '承',
|
|
|
129 |
'文', '柏', '樺', '瑋', '穎', '美', '翰', '華',
|
|
|
130 |
'詩', '豪', '賢', '軒', '銘', '霖',
|
|
|
131 |
];
|
|
|
132 |
|
|
|
133 |
protected static $characterFemale = [
|
|
|
134 |
'伶', '佩', '佳', '依', '儀', '冠', '君', '嘉',
|
|
|
135 |
'如', '娟', '婉', '婷', '安', '宜', '家', '庭',
|
|
|
136 |
'心', '思', '怡', '惠', '慧', '文', '欣', '涵',
|
|
|
137 |
'淑', '玲', '珊', '琪', '琬', '瑜', '穎', '筑',
|
|
|
138 |
'筱', '美', '芬', '芳', '華', '萍', '萱', '蓉',
|
|
|
139 |
'詩', '貞', '郁', '鈺', '雅', '雯', '靜', '馨',
|
|
|
140 |
];
|
|
|
141 |
|
|
|
142 |
public static function randomName($pool, $n)
|
|
|
143 |
{
|
|
|
144 |
$name = '';
|
|
|
145 |
|
|
|
146 |
for ($i = 0; $i < $n; ++$i) {
|
|
|
147 |
$name .= static::randomElement($pool);
|
|
|
148 |
}
|
|
|
149 |
|
|
|
150 |
return $name;
|
|
|
151 |
}
|
|
|
152 |
|
|
|
153 |
public static function firstNameMale()
|
|
|
154 |
{
|
|
|
155 |
return static::randomName(static::$characterMale, self::numberBetween(1, 2));
|
|
|
156 |
}
|
|
|
157 |
|
|
|
158 |
public static function firstNameFemale()
|
|
|
159 |
{
|
|
|
160 |
return static::randomName(static::$characterFemale, self::numberBetween(1, 2));
|
|
|
161 |
}
|
|
|
162 |
|
|
|
163 |
public static function suffix()
|
|
|
164 |
{
|
|
|
165 |
return '';
|
|
|
166 |
}
|
|
|
167 |
|
|
|
168 |
/**
|
|
|
169 |
* @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE
|
|
|
170 |
*
|
|
|
171 |
* @see https://en.wikipedia.org/wiki/National_Identification_Card_(Republic_of_China)
|
|
|
172 |
*
|
|
|
173 |
* @return string Length 10 alphanumeric characters, begins with 1 latin character (birthplace),
|
|
|
174 |
* 1 number (gender) and then 8 numbers (the last one is check digit).
|
|
|
175 |
*/
|
|
|
176 |
public function personalIdentityNumber($gender = null)
|
|
|
177 |
{
|
|
|
178 |
$birthPlace = self::randomKey(self::$idBirthplaceCode);
|
|
|
179 |
$birthPlaceCode = self::$idBirthplaceCode[$birthPlace];
|
|
|
180 |
|
|
|
181 |
$gender = ($gender != null) ? $gender : self::randomElement([self::GENDER_FEMALE, self::GENDER_MALE]);
|
|
|
182 |
$genderCode = ($gender === self::GENDER_MALE) ? 1 : 2;
|
|
|
183 |
|
|
|
184 |
$randomNumberCode = self::randomNumber(7, true);
|
|
|
185 |
|
|
|
186 |
$codes = str_split($birthPlaceCode . $genderCode . $randomNumberCode);
|
|
|
187 |
$total = 0;
|
|
|
188 |
|
|
|
189 |
foreach ($codes as $key => $code) {
|
|
|
190 |
$total += $code * self::$idDigitValidator[$key];
|
|
|
191 |
}
|
|
|
192 |
|
|
|
193 |
$checkSumDigit = 10 - ($total % 10);
|
|
|
194 |
|
|
|
195 |
if ($checkSumDigit == 10) {
|
|
|
196 |
$checkSumDigit = 0;
|
|
|
197 |
}
|
|
|
198 |
|
|
|
199 |
return $birthPlace . $genderCode . $randomNumberCode . $checkSumDigit;
|
|
|
200 |
}
|
|
|
201 |
}
|