Weryfikacja numeru Pesel, cyfra kontrolna

0

Mam taki kod, sprawdza on poprawność numeru pesel wg https://pl.wikipedia.org/wiki/PESEL#Cyfra_kontrolna_i_sprawdzanie_poprawno.C5.9Bci_numeru

Niektóre numery on sprawdza i są okej, z kolei niektóre numery wyświetla że są niepoprawne (chociaż są dobre), myślę, że tutaj chodzi o to
Przykład dla numeru PESEL 44051401358:

14 + 34 + 70 + 95 + 11 + 34 + 70 + 91 + 13 + 35 = 101
Wyznaczamy resztę z dzielenia sumy przez 10:

101:10 = 10 reszta = 1
Jeżeli reszta = 0, to cyfra kontrolna wynosi 0. Jeżeli reszta ≠ 0, to cyfra kontrolna będzie uzupełnieniem reszty do 10, czyli w podanym przykładzie jest to cyfra 9.

10 – 1 = 9
Wynik 9 nie jest równy ostatniej cyfrze numeru PESEL, czyli 8, więc numer jest błędny.

Proszę o rady, dziękuję

import java.util.Scanner;
 
public class WeryfikacjaPesel {
 
    public static void main(String args[]) {
 
        Scanner load = new Scanner(System.in);
 
        String numberPesel = load.next();
 
        if (numberPesel.length() == 11) {
 
            int pierwszaCyfra = Integer.parseInt(numberPesel.substring(0, 1));
            int drugaCyfra = Integer.parseInt(numberPesel.substring(1, 2));
            int trzeciaCyfra = Integer.parseInt(numberPesel.substring(2, 3));
            int czwartaCyfra = Integer.parseInt(numberPesel.substring(3, 4));
            int piataCyfra = Integer.parseInt(numberPesel.substring(4, 5));
            int szostaCyfra = Integer.parseInt(numberPesel.substring(5, 6));
            int siodmaCyfra = Integer.parseInt(numberPesel.substring(6, 7));
            int osmaCyfra = Integer.parseInt(numberPesel.substring(7, 8));
            int dziewiataCyfra = Integer.parseInt(numberPesel.substring(8, 9));
            int dziesiataCyfra = Integer.parseInt(numberPesel.substring(9, 10));
            int jedenastaCyfra = Integer
                    .parseInt(numberPesel.substring(10, 11));
 
            int check = 1 * pierwszaCyfra + 3 * drugaCyfra + 7 * trzeciaCyfra
                    + 9 * czwartaCyfra + 1 * piataCyfra + 3 * szostaCyfra + 7
                    * siodmaCyfra + 9 * osmaCyfra + 1 * dziewiataCyfra + 3
                    * dziesiataCyfra;
            int lastNumber = check % 10;
            int controlNumber = 10 - lastNumber;
 
            if (controlNumber == jedenastaCyfra) {
                System.out.println("Ok pesel");
            }
 
            else {
                System.out.println("Podałeś błędny numer Pesel");
 
            }
        }
    }
}
1

Podaj taki przykład jak opisałeś, czyli niektóre numery wyświetla że są niepoprawne (chociaż są dobre).

0

Dziękuję bardzo @szweszwe

Sprawa rozwiązana

1

Kolejne numery możesz przechowywać w jakiejś kolekcji. Konkretny znak ze stringa możesz pobrać za pomocą charAt zamiast substring a to co zapisujesz do check mogłaby zwracać jakaś metoda. Poza tym wypadałoby ujednolicić język nazywania zmiennych i klasy - oczywiście na angielski.

2

Jak to dobrze, że PESEL ma tylko 11 znaków, bo już widziałem oczyma wyobraźni

int trzyTysiacePierwszaCyfra = Integer.parseInt(numberPesel.substring(3000, 3001));

.

            int[] digits = new int[11];
            for(int i=0;i<11;i++){
                digits[i] = Integer.parseInt(numberPesel.substring(i, i + 1));
            }
            int[] weights = {1,3,7,9,1,3,7,9,1,3};
            int check = 0;
            for(int i=0;i<10;i++){
                check += weights[i]*digits[i];
            }
            int lastNumber = check % 10;
            int controlNumber = 10 - lastNumber;
 
            if (controlNumber == digits[10]) {
                System.out.println("Ok pesel");
0

61092211860
93111401080

pesele z zerami na końcu nie chodzą, a powyższe są poprawne

import java.util.Scanner;

public class WeryfikacjaPeselDwa {

	public static void main(String[] args) {

		System.out.println("Podaj swoj nr Pesel: ");

		Scanner load = new Scanner(System.in);
		String numberPesel = load.next();
		int check = 0;
		int[] tablicaPesel = new int[11];
		for (int i = 0; i < 11; i++) {
			tablicaPesel[i] = Integer.parseInt(numberPesel.substring(i, i + 1));
		}

		int weights[] = { 1, 3, 7, 9, 1, 3, 7, 9, 1, 3 };

		for (int i = 0; i < 10; i++) {
			check += weights[i] * tablicaPesel[i];
		}

		int lastNumber = check % 10;
		int controlNumber = 10 - lastNumber;
		if (controlNumber == tablicaPesel[10]) {
			System.out.println("Ok pesel");
		} else {
			System.out.println("Podales bledny pesel");
		}

	}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1