Lab 3 - Klimek Bazy Danych || Walidacja PESEL nie jest pełna
-- 1. Wyznaczyć ilość liczb pięciocyfrowych parzystych zawierających cyfrę 5
select count(n) from dbo.Nums
where n like '%5%'
AND n % 2 = 0
AND n > 9999 AND n < 100000;
-- Odpowiedź : 15840
-- 2. Do tabeli tymczasowej #Osoby z kolumnami Id, Imię, Nazwisko, Data urodzenia, Płeć, Pesel (z odpowiednimi typami danych) wpisać przykładowe dane (z poprawnymi i niepoprawnymi danymi)
-- Dla wszystkich danych w tabeli Osoby zwalidować czy to jest poprawny PESEL (jak najwięcej walidacji):
-- sprawdzić długość napisu, czy zawiera same cyfry, czy dane z daty urodzenia i płci się zgadzają, zweryfikować sumę kontrolną.
-- Wypisać informacje w postaci Imię: xx, Nazwisko: xx, Poprawny/Niepoprawny PESEL: xx, Informacja o błędzie przy walidacji PESEL
create table #Osoby (
Id int primary key identity(1,1),
Imie varchar(50) not null,
Nazwisko varchar(50) not null,
Data_urodzenia date,
Plec varchar(1),
Pesel varchar(11)
);
--poprawny PESEL tylko pierwszy
--insert into #Osoby values ('Stanislaw','Daniluk','2000-10-10','M','00301004156');
--insert into #Osoby values ('Emilia','Daniluk','1999-01-01','M','00301004156');
--insert into #Osoby values ('Jarek','Daniluk','1998-02-02','M','00301004156');
--insert into #Osoby values ('Aneta','Daniluk','1997-10-10','M','00301004156');
--insert into #Osoby values ('Franciszka','Daniluk','1996-10-10','M','00301004156');
--insert into #Osoby values ('Dawid','Daniluk','1965-10-10','M','00301004156');
--insert into #Osoby values ('Marcin','Daniluk','1964-10-10','M','00301004156');
--insert into #Osoby values ('Michał','Daniluk','1969-10-10','M','00301004156');
--insert into #Osoby values ('Mateusz','Daniluk','1991-10-10','M','00301004156');
--insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','00301004156');
--insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','003d10s4156');
--insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','qweqe');
--insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','qweqw');
--insert into #Osoby values ('Ania','Daniluk','1991-10-10','M','bfhfnyn')
CREATE FUNCTION dbo.IsValidPesel(@pesel nchar(11))
RETURNS bit
AS
BEGIN
IF ISNUMERIC(@pesel) = 0
RETURN 0
IF LEN(@pesel) != 11
RETURN 0
DECLARE
@weights AS TABLE
(
Position tinyint IDENTITY(1,1) NOT NULL,
Weight tinyint NOT NULL
)
INSERT INTO @weights VALUES (1), (3), (7), (9), (1), (3), (7), (9), (1), (3), (1)
IF (SELECT SUM(CONVERT(TINYINT, SUBSTRING(@pesel, Position, 1)) * Weight) % 10 FROM @weights ) = 0
RETURN 1
RETURN 0
END
select * from #Osoby;
select Imie, Nazwisko, Pesel from #Osoby
where dbo.IsValidPesel(Pesel) = 1;
Paste Hosted With By Wklejamy.pl