Do @Rafkus.
Rafkus pisze:Jakoś nie potrafiłem odtworzyć kontroli tak aby działała jak w oryginale.
W Calc Apache OpenOffice nie można tego sposobu kontroli poprawności wykonać, gdyż nie dopuszcza ona możliwości zatwierdzenia poprawności danej na na podstawie formuły warunkowej, w taki sposób jaki jest stosowany w formatowaniu warunkowym. Dlatego pozostaje skorzystanie tylko z formatowania warunkowego.
W Calc LibreOffice w poleceniu "Poprawność danych" jest dodatkowa, nowa opcja w polu "Zezwól", to pozycja "Niestandardowy", pozwalająca wstawić formułę logiczną, której wartość PRAWDA oznacza, że dane są poprawne.
Też pogrzebałem w tym arkuszu. Oprócz tej kontroli poprawności, o czym było wyżej, wykorzystano w nim funkcję JEŻELI.BŁĄD (IFERROR). Tej funkcji nie zaimplementowano do arkusza Calc Apache OpenOffice (a szkoda, bo przydatna jest).
Na szczęście wszystkie znalezione przeze mnie wystąpienia dotyczyły sytuacji dzielenia przez zero. Wystarczyło zatem wykorzystać zwykłe JEŻELI, które sprawdza czy dzielnik jest różny od 0.
Jak pewnie zauważyłeś autorzy w dalszej kolumnie (odpowiednio W i V) utworzyli formuły obliczającą cyfrę kontrolną wprowadzonego numeru PESEL
Kod: Zaznacz cały
=JEŻELI.BŁĄD(MOD(9*FRAGMENT.TEKSTU(D14;1;1)+7*FRAGMENT.TEKSTU(D14;2;1)+3*FRAGMENT.TEKSTU(D14;3;1)+FRAGMENT.TEKSTU(D14;4;1)+9*FRAGMENT.TEKSTU(D14;5;1)+7*FRAGMENT.TEKSTU(D14;6;1)+3*FRAGMENT.TEKSTU(D14;7;1)+FRAGMENT.TEKSTU(D14;8;1)+9*FRAGMENT.TEKSTU(D14;9;1)+7*FRAGMENT.TEKSTU(D14;10;1);10);10)
po to aby w formule sprawdzania poprawności PESELU zrobić to tak:
Kod: Zaznacz cały
=ORAZ(DŁ(D14)=11;WARTOŚĆ(FRAGMENT.TEKSTU(D14;11;1))=W14)
Bardzo moim zdaniem ciekawie o cyfrach kontrolnych napisano tutaj:
https://romek.info/ut/kody.html
Dla cyfry kontrolnej PESEL-u pierwotnymi wagami pozycji były liczby 1, 3, 7, 9, 1, 3, 7, 9, 1, 3. Wykorzystanie tych wag oraz wagi 1 dla jedenastej cyfry w PESELU tworzy sumę, której ostatnią cyfrą jest 0 jeżeli numer PESEL jest prawidłowy. Wystarczy zatem obliczyć modulo 10 takiej sumy. Wynik 0 oznacza, że kod jest poprawny. Na tej zasadzie zbudowałem nowe obliczenie w tych kolumnach
Kod: Zaznacz cały
=JEŻELI(I(CZY.LICZBA(WARTOŚĆ(D14));DŁ(D14)=11);MOD(MID(D14;1;1)+MID(D14;5;1)+MID(D14;9;1)+3*(MID(D14;2;1)+MID(D14;6;1)+MID(D14;10;1))+7*(MID(D14;3;1)+MID(D14;7;1))+9*(MID(D14;4;1)+MID(D14;8;1))+PRAWY(D14;1);10);1)+DŁ(E14)
Jeśli wynik jest <>0 to znaczy, że jest błąd. W tej formule dodaję długość ciągu w komórce E, dzięki temu sygnalizuję także błąd, gdy wpisano PESEL prawidłowy a oprócz tego nr innego dokumentu. Natomiast formatowanie warunkowe sprawdza taką formułę: