Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Faker\Provider\kk_KZ;
4
 
5
use Faker\Provider\DateTime;
6
 
7
class Person extends \Faker\Provider\Person
8
{
9
    public const GENDER_MALE = 0;
10
    public const GENDER_FEMALE = 1;
11
 
12
    public const CENTURY_19TH = 0;
13
    public const CENTURY_20TH = 1;
14
    public const CENTURY_21ST = 2;
15
 
16
    public const MALE_CENTURY_19TH = 1;
17
    public const MALE_CENTURY_20TH = 3;
18
    public const MALE_CENTURY_21ST = 5;
19
 
20
    public const FEMALE_CENTURY_19TH = 2;
21
    public const FEMALE_CENTURY_20TH = 4;
22
    public const FEMALE_CENTURY_21ST = 6;
23
 
24
    /**
25
     * @var array
26
     */
27
    public static $firstSequenceBitWeights = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
28
 
29
    /**
30
     * @var array
31
     */
32
    public static $secondSequenceBitWeights = [3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 2];
33
 
34
    /**
35
     * @var array
36
     */
37
    public static $genderCenturyMap = [
38
        self::GENDER_MALE => [
39
            self::CENTURY_19TH => self::MALE_CENTURY_19TH,
40
            self::CENTURY_20TH => self::MALE_CENTURY_20TH,
41
            self::CENTURY_21ST => self::MALE_CENTURY_21ST,
42
        ],
43
        self::GENDER_FEMALE => [
44
            self::CENTURY_19TH => self::FEMALE_CENTURY_19TH,
45
            self::CENTURY_20TH => self::FEMALE_CENTURY_20TH,
46
            self::CENTURY_21ST => self::FEMALE_CENTURY_21ST,
47
        ],
48
    ];
49
 
50
    /**
51
     * @see https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F
52
     *
53
     * @var array
54
     */
55
    protected static $maleNameFormats = [
56
        '{{lastName}}ұлы {{firstNameMale}}',
57
    ];
58
 
59
    /**
60
     * @see https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F
61
     *
62
     * @var array
63
     */
64
    protected static $femaleNameFormats = [
65
        '{{lastName}}қызы {{firstNameFemale}}',
66
    ];
67
 
68
    /**
69
     * @see http://koshpendi.kz/index.php/nomad/imena/
70
     *
71
     * @var array
72
     */
73
    protected static $firstNameMale = [
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
     * @see http://koshpendi.kz/index.php/nomad/imena/
106
     *
107
     * @var array
108
     */
109
    protected static $firstNameFemale = [
110
        'Асылтас',
111
        'Әужа',
112
        'Бүлдіршін',
113
        'Гүлшаш',
114
        'Ғафура',
115
        'Ділдә',
116
        'Еркежан',
117
        'Жібек',
118
        'Зылиқа',
119
        'Ирада',
120
        'Күнсұлу',
121
        'Қырмызы',
122
        'Ләтипа',
123
        'Мүштәри',
124
        'Нұршара',
125
        'Орынша',
126
        'Өрзия',
127
        'Перизат',
128
        'Рухия',
129
        'Сындыбала',
130
        'Тұрсынай',
131
        'Уәсима',
132
        'Ұрқия',
133
        'Үрия',
134
        'Фируза',
135
        'Хафиза',
136
        'Шырынгүл',
137
        'Ырысты',
138
        'Іңкәр',
139
    ];
140
 
141
    /**
142
     * @see http://koshpendi.kz/index.php/nomad/imena/
143
     * @see https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F
144
     *
145
     * @var array
146
     */
147
    protected static $lastName = [
148
        'Адырбай',
149
        'Әжібай',
150
        'Байбөрі',
151
        'Ғизат',
152
        'Ділдабек',
153
        'Ешмұхамбет',
154
        'Жігер',
155
        'Зікірия',
156
        'Иса',
157
        'Кунту',
158
        'Қыдыр',
159
        'Лұқпан',
160
        'Мышырбай',
161
        'Нысынбай',
162
        'Ошақбай',
163
        'Өтетілеу',
164
        'Пірәлі',
165
        'Рүстем',
166
        'Сырмұхамбет',
167
        'Тілеміс',
168
        'Уәлі',
169
        'Ұлықбек',
170
        'Үстем',
171
        'Фахир',
172
        'Хұсайын',
173
        'Шілдебай',
174
        'Ыстамбақы',
175
        'Ісмет',
176
    ];
177
 
178
    /**
179
     * Note! When calculating individual identification number
180
     *   2000-01-01 - 2000-12-31 counts as 21th century
181
     *   1900-01-01 - 1900-12-31 counts as 20th century
182
     *
183
     * @param int $year
184
     *
185
     * @return int
186
     */
187
    private static function getCenturyByYear($year)
188
    {
189
        if (($year >= 2100) || ($year < 1800)) {
190
            throw new \InvalidArgumentException('Unexpected century');
191
        }
192
 
193
        if ($year >= 2000) {
194
            return self::CENTURY_21ST;
195
        }
196
 
197
        if ($year >= 1900) {
198
            return self::CENTURY_20TH;
199
        }
200
 
201
        return self::CENTURY_19TH;
202
    }
203
 
204
    /**
205
     * National Individual Identification Numbers
206
     *
207
     * @see   http://egov.kz/wps/portal/Content?contentPath=%2Fegovcontent%2Fcitizen_migration%2Fpassport_id_card%2Farticle%2Fiin_info&lang=en
208
     * @see   https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D0%B8%D0%B2%D0%B8%D0%B4%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80
209
     *
210
     * @param \DateTime $birthDate
211
     * @param int       $gender
212
     *
213
     * @return string 12 digits, like 780322300455
214
     */
215
    public static function individualIdentificationNumber(\DateTime $birthDate = null, $gender = self::GENDER_MALE)
216
    {
217
        if (!$birthDate) {
218
            $birthDate = DateTime::dateTimeBetween();
219
        }
220
 
221
        do {
222
            $population = self::numberBetween(1000, 2000);
223
            $century = self::getCenturyByYear((int) $birthDate->format('Y'));
224
 
225
            $iin = $birthDate->format('ymd');
226
            $iin .= (string) self::$genderCenturyMap[$gender][$century];
227
            $iin .= (string) $population;
228
            $checksum = self::checkSum($iin);
229
        } while ($checksum === 10);
230
 
231
        return $iin . (string) $checksum;
232
    }
233
 
234
    /**
235
     * @param string $iinValue
236
     *
237
     * @return int
238
     */
239
    public static function checkSum($iinValue)
240
    {
241
        $controlDigit = self::getControlDigit($iinValue, self::$firstSequenceBitWeights);
242
 
243
        if ($controlDigit === 10) {
244
            return self::getControlDigit($iinValue, self::$secondSequenceBitWeights);
245
        }
246
 
247
        return $controlDigit;
248
    }
249
 
250
    /**
251
     * @param string $iinValue
252
     * @param array  $sequence
253
     *
254
     * @return int
255
     */
256
    protected static function getControlDigit($iinValue, $sequence)
257
    {
258
        $sum = 0;
259
 
260
        for ($i = 0; $i <= 10; ++$i) {
261
            $sum += (int) $iinValue[$i] * $sequence[$i];
262
        }
263
 
264
        return $sum % 11;
265
    }
266
}