Poprawiłem, teraz jest tak
Kod
// 10 digits (number)
$digits_number = $year_last.$month_number.$day.$random_number.$sex;
// Number sum
$arrBalance = [9, 7, 3, 1, 9, 7, 3, 1, 9, 7];
$number = (string)$digits_number;
$strlen = strlen($number);
$digit_sum = 0;
for ($i=0; $i<$strlen; $i++) {
$digit_sum += ($arrBalance[$i] * (int)$number[$i]);
}
// Checksum
$checksum = $digit_sum % 10;
// PESEL
$pesel = $digits_number.$checksum;
Pomińmy PSR (w tym kodzie), gdzie tutaj można użyć === ? INT - czy o ten chodziło.
MODULO czy teraz jest dobrze?
Zobaczyłem jeszcze jedno
Kod
// Month
$month_number = $arrMonthsMore[(int)$year_first][(int)$month];
if (strlen($month_number) < 2) $month_number = (int)'0'.$month_number;
W większości przypadków liczba (dla miesięcy) jest dwu cyfrowa, ale
dla lat 1900-1999 są liczby jedno cyfrowe i brakuje 0 z przodu liczby
przez co PESEL ma 10 nie 11 cyfr. Jak dodać 0 przed liczbą: 1, 2, 3... (01, 02, 03)