SQL sætning der validerer om et cpr nummer lever op til mod 11
Hej,
Jeg har forgæves forsøgt at finde en sql der kan validerer om et cpr er validt i følge modulus 11 testen. - Jeg ved godt at cpr.dk laver cpr numre der ikke er mod 11 mere
Jeg har en tabel som jeg gerne vil ahev renset for cpr numre der ikke lever op til mod 11 testen, men er virklig på bar bund idet jeg ikke er den store sql haj.
Tænkte der måske er nogen der har lavet den bid kode i forbindelse med et andet projekt?
Du kan lave nedenstående funktion på din database, og så kalde den sådan her: SELECT dbo.CheckCpr('1234567890')
Eller: SELECT cprKolonne, dbo.CheckCpr(cprKolonne) as IsCprValid FROM DinTabel
----- CREATE FUNCTION dbo.CheckCpr (@cpr VARCHAR(10)) RETURNS INT AS BEGIN DECLARE @return INT
DECLARE @1 INT = CAST(SUBSTRING(@cpr, 1, 1) AS INT) DECLARE @2 INT = CAST(SUBSTRING(@cpr, 2, 1) AS INT) DECLARE @3 INT = CAST(SUBSTRING(@cpr, 3, 1) AS INT) DECLARE @4 INT = CAST(SUBSTRING(@cpr, 4, 1) AS INT) DECLARE @5 INT = CAST(SUBSTRING(@cpr, 5, 1) AS INT) DECLARE @6 INT = CAST(SUBSTRING(@cpr, 6, 1) AS INT) DECLARE @7 INT = CAST(SUBSTRING(@cpr, 7, 1) AS INT) DECLARE @8 INT = CAST(SUBSTRING(@cpr, 8, 1) AS INT) DECLARE @9 INT = CAST(SUBSTRING(@cpr, 9, 1) AS INT) DECLARE @10 INT = CAST(SUBSTRING(@cpr, 10, 1) AS INT)
Måske kan dette her bruges: http://www.eksperten.dk/spm/525391 (jeg har heldigvis mulighed for at teste via et programmeringssprog). I øvrigt bør man overveje at undlade modulus-11 metoden, da CPR-registret dagligt er ved at løbe tør for valide CPR-endelser.
Jeg var ikke lige opmærksom på at jeg var i kategorien MS SQL, så svaret ovenfor er ikke lige til at anvende (Det virker i Oracle). Dette skulle virke umiddelbart i SQL Server:
select CASE mod((CAST(substring(cpr,1,1) AS NUMBER)*4 + CAST(substring(cpr,2,1) AS NUMBER)*3 + CAST(substring(cpr,3,1) AS NUMBER)*2 + CAST(substring(cpr,4,1) AS NUMBER)*7 + CAST(substring(cpr,5,1) AS NUMBER)*6 + CAST(substring(cpr,6,1) AS NUMBER)*5 + CAST(substring(cpr,7,1) AS NUMBER)*4 + CAST(substring(cpr,8,1) AS NUMBER)*3 + CAST(substring(cpr,9,1) AS NUMBER)*2 + CAST(substring(cpr,10,1) AS NUMBER)*1 ),11) WHEN 0 THEN 'Valid' ELSE 'Invalid' END from yourtable
Når jeg kører din sql får jeg følgende fejlmeddelse om
"Ikke tilladt sqlsætning - Ugyldig nøgleord i forspørgsel: "BEGIN" ved position 54."
Jeg formoder det er fordi der er restriktioner på DB og det kun er tilladt at køre rene select sætninger på DB.
- Nogen andre forslag?
Hilsen G
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.