Jak sprawdzić PESEL w Sybase?

Podczas procesu modelowania oraz oskryptowywania tworzonej przez nas bazy danych do różnych projektów, możemy się zetknąć z problemem weryfikacji wprowadzonych przez użytkownika informacji. Jako programiści powinniśmy być szczególnie nieufni co do zachowania użytkowników korzystających z naszych produktów. Triggery w bazach danych mogą pomóc nam przeanalizować wprowadzane informacje jeszcze przed umieszczeniem ich wewnątrz tabel.


Poniżej przedstawiam kod mojego autorstwa, którego używam do weryfikacji poprawności numeru PESEL:

ALTER TRIGGER "Sprawdzenie_PESEL" BEFORE INSERT, UPDATE
ORDER 1 ON "DBA"."Lekarz"
REFERENCING NEW AS n
FOR EACH ROW 
BEGIN
    /* http://pl.wikipedia.org/wiki/PESEL */
    DECLARE _pesel CHAR(11);
    DECLARE _dl INTEGER; // Dlugosc CHAR-a
    DECLARE _il INTEGER; // Iloczyn skladowych
    DECLARE _sum INTEGER; // Suma skladowych
 
   SET _pesel = (n.PESEL);
   SET _dl = (char_length(n.PESEL));
 
    IF _dl < 11
    THEN
        signal Podany_PESEL_Jest_Za_Krotki
    END IF;
     
    IF _dl > 11
    THEN
        signal Podany_PESEL_Jest_Za_Dlugi
    END IF;
 
    // Jezeli suma iloczynu skladowych i stalych
    // Mod 10 jest rowna zeru
    // PESEL jest poprawny
 
    SET _il = 1*SUBSTRING(n.PESEL,1,1);
    SET _sum = _il;
 
    SET _il = 3*SUBSTRING(n.PESEL,2,1);
    SET _sum = _sum + _il;
 
    SET _il = 7*SUBSTRING(n.PESEL,3,1);
    SET _sum = _sum + _il;
 
    SET _il = 9*SUBSTRING(n.PESEL,4,1);
    SET _sum = _sum + _il;
 
    SET _il = 1*SUBSTRING(n.PESEL,5,1);
    SET _sum = _sum + _il;
 
    SET _il = 3*SUBSTRING(n.PESEL,6,1);
    SET _sum = _sum + _il;
 
    SET _il = 7*SUBSTRING(n.PESEL,7,1);
    SET _sum = _sum + _il;
 
    SET _il = 9*SUBSTRING(n.PESEL,8,1);
    SET _sum = _sum + _il;
 
    SET _il = 1*SUBSTRING(n.PESEL,9,1);
    SET _sum = _sum + _il;
 
    SET _il = 3*SUBSTRING(n.PESEL,10,1);
    SET _sum = _sum + _il;
 
    SET _il = 1*SUBSTRING(n.PESEL,11,1);
    SET _sum = _sum + _il;
 
    SET _sum = mod(_sum,10);
     
    IF _sum <> 0
    THEN
        signal PESEL_JEST_NIEPOPRAWNY
    END IF
 
END

Zachęcam do przeanalizowania.
Chętnie przyjmę wszelkie uwagi :)

Oceń ten artykuł:

Komentarze

Napisz komentarz

Required for comment verification