PageRenderTime 49ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Faker/Provider/zh_TW/Person.php

http://github.com/fzaninotto/Faker
PHP | 201 lines | 159 code | 22 blank | 20 comment | 4 complexity | 097380730909bce1f59fa340fccd7eca MD5 | raw file
  1. <?php
  2. namespace Faker\Provider\zh_TW;
  3. class Person extends \Faker\Provider\Person
  4. {
  5. /**
  6. * @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
  7. */
  8. public static $idBirthplaceCode = array(
  9. 'A' => 10,
  10. 'B' => 11,
  11. 'C' => 12,
  12. 'D' => 13,
  13. 'E' => 14,
  14. 'F' => 15,
  15. 'G' => 16,
  16. 'H' => 17,
  17. 'I' => 34,
  18. 'J' => 18,
  19. 'K' => 19,
  20. 'M' => 21,
  21. 'N' => 22,
  22. 'O' => 35,
  23. 'P' => 23,
  24. 'Q' => 24,
  25. 'T' => 27,
  26. 'U' => 28,
  27. 'V' => 29,
  28. 'W' => 32,
  29. 'X' => 30,
  30. 'Z' => 33
  31. );
  32. /**
  33. * @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
  34. */
  35. public static $idDigitValidator = array(1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1);
  36. protected static $maleNameFormats = array(
  37. '{{lastName}}{{firstNameMale}}',
  38. );
  39. protected static $femaleNameFormats = array(
  40. '{{lastName}}{{firstNameFemale}}',
  41. );
  42. protected static $titleMale = array('先生', '博士', '教授');
  43. protected static $titleFemale = array('小姐', '太太', '博士', '教授');
  44. /**
  45. * @link http://zh.wikipedia.org/wiki/%E7%99%BE%E5%AE%B6%E5%A7%93
  46. */
  47. protected static $lastName = array(
  48. '趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '馮',
  49. '陳', '褚', '衛', '蔣', '沈', '韓', '楊', '朱', '秦',
  50. '尤', '許', '何', '呂', '施', '張', '孔', '曹', '嚴',
  51. '華', '金', '魏', '陶', '姜', '戚', '謝', '鄒', '喻',
  52. '柏', '水', '竇', '章', '雲', '蘇', '潘', '葛',
  53. '奚', '范', '彭', '郎', '魯', '韋', '昌', '馬',
  54. '苗', '鳳', '花', '方', '俞', '任', '袁', '柳',
  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. * @link http://technology.chtsai.org/namefreq/
  116. */
  117. protected static $characterMale = array(
  118. '佳', '俊', '信', '偉', '傑', '冠', '君', '哲',
  119. '嘉', '威', '宇', '安', '宏', '宗', '宜', '家',
  120. '庭', '廷', '建', '彥', '心', '志', '思', '承',
  121. '文', '柏', '樺', '瑋', '穎', '美', '翰', '華',
  122. '詩', '豪', '賢', '軒', '銘', '霖',
  123. );
  124. protected static $characterFemale = array(
  125. '伶', '佩', '佳', '依', '儀', '冠', '君', '嘉',
  126. '如', '娟', '婉', '婷', '安', '宜', '家', '庭',
  127. '心', '思', '怡', '惠', '慧', '文', '欣', '涵',
  128. '淑', '玲', '珊', '琪', '琬', '瑜', '穎', '筑',
  129. '筱', '美', '芬', '芳', '華', '萍', '萱', '蓉',
  130. '詩', '貞', '郁', '鈺', '雅', '雯', '靜', '馨',
  131. );
  132. public static function randomName($pool, $n)
  133. {
  134. $name = '';
  135. for ($i = 0; $i < $n; ++$i) {
  136. $name .= static::randomElement($pool);
  137. }
  138. return $name;
  139. }
  140. public static function firstNameMale()
  141. {
  142. return static::randomName(static::$characterMale, mt_rand(1, 2));
  143. }
  144. public static function firstNameFemale()
  145. {
  146. return static::randomName(static::$characterFemale, mt_rand(1, 2));
  147. }
  148. public static function suffix()
  149. {
  150. return '';
  151. }
  152. /**
  153. * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE
  154. *
  155. * @see https://en.wikipedia.org/wiki/National_Identification_Card_(Republic_of_China)
  156. *
  157. * @return string Length 10 alphanumeric characters, begins with 1 latin character (birthplace),
  158. * 1 number (gender) and then 8 numbers (the last one is check digit).
  159. */
  160. public function personalIdentityNumber($gender = null)
  161. {
  162. $birthPlace = self::randomKey(self::$idBirthplaceCode);
  163. $birthPlaceCode = self::$idBirthplaceCode[$birthPlace];
  164. $gender = ($gender != null) ? $gender : self::randomElement(array(self::GENDER_FEMALE, self::GENDER_MALE));
  165. $genderCode = ($gender === self::GENDER_MALE) ? 1 : 2;
  166. $randomNumberCode = self::randomNumber(7, true);
  167. $codes = str_split($birthPlaceCode . $genderCode . $randomNumberCode);
  168. $total = 0;
  169. foreach ($codes as $key => $code) {
  170. $total += $code * self::$idDigitValidator[$key];
  171. }
  172. $checkSumDigit = 10 - ($total % 10);
  173. if ($checkSumDigit == 10) {
  174. $checkSumDigit = 0;
  175. }
  176. $id = $birthPlace . $genderCode . $randomNumberCode . $checkSumDigit;
  177. return $id;
  178. }
  179. }