@@ -48,34 +48,34 @@ class Egn {
4848 protected static $ EGN_WEIGHTS = array (2 , 4 , 8 , 5 , 10 , 9 , 7 , 3 , 6 );
4949
5050 protected static $ EGN_REGIONS = array (
51- 'Благоевград ' => 43 , /* от 000 до 043 */
52- 'Бургас ' => 93 , /* от 044 до 093 */
53- 'Варна ' => 139 , /* от 094 до 139 */
54- 'Велико Търново ' => 169 , /* от 140 до 169 */
55- 'Видин ' => 183 , /* от 170 до 183 */
56- 'Враца ' => 217 , /* от 184 до 217 */
57- 'Габрово ' => 233 , /* от 218 до 233 */
58- 'Кърджали ' => 281 , /* от 234 до 281 */
59- 'Кюстендил ' => 301 , /* от 282 до 301 */
60- 'Ловеч ' => 319 , /* от 302 до 319 */
61- 'Монтана ' => 341 , /* от 320 до 341 */
62- 'Пазарджик ' => 377 , /* от 342 до 377 */
63- 'Перник ' => 395 , /* от 378 до 395 */
64- 'Плевен ' => 435 , /* от 396 до 435 */
65- 'Пловдив ' => 501 , /* от 436 до 501 */
66- 'Разград ' => 527 , /* от 502 до 527 */
67- 'Русе ' => 555 , /* от 528 до 555 */
68- 'Силистра ' => 575 , /* от 556 до 575 */
69- 'Сливен ' => 601 , /* от 576 до 601 */
70- 'Смолян ' => 623 , /* от 602 до 623 */
71- 'София - град ' => 721 , /* от 624 до 721 */
72- 'София - окръг ' => 751 , /* от 722 до 751 */
73- 'Стара Загора ' => 789 , /* от 752 до 789 */
74- 'Добрич (Толбухин) ' => 821 , /* от 790 до 821 */
75- 'Търговище ' => 843 , /* от 822 до 843 */
76- 'Хасково ' => 871 , /* от 844 до 871 */
77- 'Шумен ' => 903 , /* от 872 до 903 */
78- 'Ямбол ' => 925 , /* от 904 до 925 */
51+ 'Благоевград ' => 43 , /* от 000 до 043 */
52+ 'Бургас ' => 93 , /* от 044 до 093 */
53+ 'Варна ' => 139 , /* от 094 до 139 */
54+ 'Велико Търново ' => 169 , /* от 140 до 169 */
55+ 'Видин ' => 183 , /* от 170 до 183 */
56+ 'Враца ' => 217 , /* от 184 до 217 */
57+ 'Габрово ' => 233 , /* от 218 до 233 */
58+ 'Кърджали ' => 281 , /* от 234 до 281 */
59+ 'Кюстендил ' => 301 , /* от 282 до 301 */
60+ 'Ловеч ' => 319 , /* от 302 до 319 */
61+ 'Монтана ' => 341 , /* от 320 до 341 */
62+ 'Пазарджик ' => 377 , /* от 342 до 377 */
63+ 'Перник ' => 395 , /* от 378 до 395 */
64+ 'Плевен ' => 435 , /* от 396 до 435 */
65+ 'Пловдив ' => 501 , /* от 436 до 501 */
66+ 'Разград ' => 527 , /* от 502 до 527 */
67+ 'Русе ' => 555 , /* от 528 до 555 */
68+ 'Силистра ' => 575 , /* от 556 до 575 */
69+ 'Сливен ' => 601 , /* от 576 до 601 */
70+ 'Смолян ' => 623 , /* от 602 до 623 */
71+ 'София - град ' => 721 , /* от 624 до 721 */
72+ 'София - окръг ' => 751 , /* от 722 до 751 */
73+ 'Стара Загора ' => 789 , /* от 752 до 789 */
74+ 'Добрич (Толбухин) ' => 821 , /* от 790 до 821 */
75+ 'Търговище ' => 843 , /* от 822 до 843 */
76+ 'Хасково ' => 871 , /* от 844 до 871 */
77+ 'Шумен ' => 903 , /* от 872 до 903 */
78+ 'Ямбол ' => 925 , /* от 904 до 925 */
7979 'Друг/Неизвестен ' => 999 , /* от 926 до 999 - Такъв регион понякога се ползва при
8080 родени преди 1900, за родени в чужбина
8181 или ако в даден регион се родят повече
@@ -367,17 +367,38 @@ public static function get_birthday($string) {
367367
368368 /* Is it a personal number of foreigner? A simple check. */
369369 public static function is_foreigner ($ string ) {
370-
371- if (strlen ($ string ) > 3 ) {
372370
373- if (substr ($ string , 0 , 2 ) == '10 ' ) {
371+ if (!ctype_digit ($ string )) {
372+ return false ;
373+ }
374+
375+ if (strlen ($ string ) == 10 ) {
376+
377+ $ pnf_weights = array (21 , 19 , 17 , 13 , 11 , 9 , 7 , 3 , 1 );
378+
379+ $ checksum = substr ($ string , 9 , 1 );
380+ $ pnfsum = 0 ;
381+
382+ for ($ i = 0 ; $ i < 9 ; $ i ++) {
383+ $ pnfsum += substr ($ string , $ i , 1 ) * $ pnf_weights [$ i ];
384+ }
385+
386+ $ valid_checksum = $ pnfsum % 10 ;
387+
388+ if ($ checksum == $ valid_checksum ) {
374389 return true ;
375390 }
376391
377- // Added by Ivan Tcholakov, 09-SEP-2011.
392+ return false ;
393+ }
394+
395+ if (strlen ($ string ) == 11 ) {
396+
378397 if (substr ($ string , 0 , 3 ) == '229 ' ) {
379398 return true ;
380399 }
400+
401+ return false ;
381402 }
382403
383404 return false ;
0 commit comments