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

Post your comment

Required for comment verification