[Sybase] Trigger – Sprawdzenie PESEL

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 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *