Guest User

Untitled

a guest
Jul 16th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.93 KB | None | 0 0
  1. /*
  2. CREATE FUNCTION check_PESEL (@PESEL char(11))
  3. */
  4. ALTER FUNCTION check_PESEL (@PESEL char(11), @PLEC varchar(9), @DATAURODZ char(10))
  5. RETURNS int
  6. AS
  7. BEGIN
  8.     DECLARE @poprawny int = 0;
  9.     --Wczytujemy dane z numeru pesel
  10.     DECLARE @p_rok int = CAST(SUBSTRING(@PESEL, 1, 2) AS int);
  11.     DECLARE @p_miesiac int = CAST(SUBSTRING(@PESEL, 3, 2) AS int);
  12.     DECLARE @p_dzien int = CAST(SUBSTRING(@PESEL, 5, 2) AS int);
  13.     DECLARE @p_plec int = CAST(SUBSTRING(@PESEL, 10, 1) AS int);
  14.     DECLARE @p_suma int = CAST(SUBSTRING(@PESEL, 11, 1) AS int);
  15.    
  16.     DECLARE @a int = CAST(SUBSTRING(@PESEL, 1, 1) AS int);
  17.     DECLARE @b int = CAST(SUBSTRING(@PESEL, 2, 1) AS int);
  18.     DECLARE @c int = CAST(SUBSTRING(@PESEL, 3, 1) AS int);
  19.     DECLARE @d int = CAST(SUBSTRING(@PESEL, 4, 1) AS int);
  20.     DECLARE @e int = CAST(SUBSTRING(@PESEL, 5, 1) AS int);
  21.     DECLARE @f int = CAST(SUBSTRING(@PESEL, 6, 1) AS int);
  22.     DECLARE @g int = CAST(SUBSTRING(@PESEL, 7, 1) AS int);
  23.     DECLARE @h int = CAST(SUBSTRING(@PESEL, 8, 1) AS int);
  24.     DECLARE @i int = CAST(SUBSTRING(@PESEL, 9, 1) AS int);
  25.     DECLARE @j int = CAST(SUBSTRING(@PESEL, 10, 1) AS int);
  26.     DECLARE @k int = CAST(SUBSTRING(@PESEL, 11, 1) AS int);
  27.    
  28.     --Wczytujemy kolejne parametry przekazane do funkcji
  29.     DECLARE @f_rok int = CAST(SUBSTRING(@DATAURODZ, 7, 4) AS int);
  30.     DECLARE @f_miesiac int = CAST(SUBSTRING(@DATAURODZ, 4, 2) AS int);
  31.     DECLARE @f_miesiac_offset int
  32.     DECLARE @f_dzien int = CAST(SUBSTRING(@DATAURODZ, 1, 2) AS int);
  33.    
  34.     IF @f_rok > 1800 AND @f_rok < 1899
  35.     BEGIN
  36.         SET @f_miesiac_offset = 80;
  37.     END
  38.     ELSE IF @f_rok > 1900 AND @f_rok < 1999
  39.     BEGIN
  40.         SET @f_miesiac_offset = 0;
  41.     END
  42.     ELSE IF @f_rok > 2000 AND @f_rok < 2099
  43.     BEGIN
  44.         SET @f_miesiac_offset = 20;
  45.     END
  46.     ELSE IF @f_rok > 2100 AND @f_rok < 2199
  47.     BEGIN
  48.         SET @f_miesiac_offset = 40;
  49.     END
  50.     ELSE IF @f_rok > 2200 AND @f_rok < 2299
  51.     BEGIN
  52.         SET @f_miesiac_offset = 60;
  53.     END
  54.    
  55.     SET @f_rok = CAST(SUBSTRING(@DATAURODZ, 9, 2) AS int);
  56.  
  57.     --Porownujemy dane z numeru pesel z parametrami funkcji
  58.     DECLARE @valid int = 0;
  59.    
  60.     --Rok urodzenia
  61.     IF @p_rok != @f_rok
  62.     BEGIN
  63.         SET @valid = @valid + 1
  64.     END
  65.    
  66.     --Miesiac urodzenia
  67.     IF @p_miesiac != @f_miesiac + @f_miesiac_offset
  68.     BEGIN
  69.         SET @valid = @valid + 1
  70.     END
  71.    
  72.     --Dzien urodzenia
  73.     IF @p_dzien != @f_dzien
  74.     BEGIN
  75.         SET @valid = @valid + 1
  76.     END
  77.    
  78.     --Plec
  79.     IF @PLEC = 'Kobieta'
  80.     BEGIN
  81.         IF @p_plec = 1 or @p_plec = 3 or @p_plec = 5 or @p_plec = 7 or @p_plec = 9
  82.         BEGIN
  83.             SET @valid = @valid + 1
  84.         END
  85.     END
  86.     ELSE
  87.     BEGIN
  88.         IF @p_plec = 0 or @p_plec = 2 or @p_plec = 4 or @p_plec = 6 or @p_plec = 8
  89.         BEGIN
  90.             SET @valid = @valid + 1
  91.         END
  92.     END
  93.  
  94.     --Sprawdzamy kontrolke
  95.     IF ((@a+3*@b+7*@c+9*@d+@e+3*@f+7*@g+9*@h+@i+3*@j+@k)%10) != 0
  96.     BEGIN
  97.         SET @valid = @valid + 1
  98.     END
  99.    
  100.     IF @valid = 0
  101.     BEGIN
  102.         SET @poprawny = 1
  103.     END
  104. return @poprawny;
  105. END;
  106.  
  107. GO
  108.  
  109. SELECT dbo.check_PESEL('53083006595', 'Meżczyzna', '30.08.1953');
  110. SELECT dbo.check_PESEL('91052800717', 'Meżczyzna', '28.05.1991');
Add Comment
Please, Sign In to add comment