Hur kan jag kolla om folk skriver i ett korrekt personnummer (dvs. alla 10 siffror) i formuläret och att det inte är ett fejkat?
kan jag checka det på nåt sätt?
(att det inte är fejkat = alla 10 siffror står med + att det ska vara realistiskt...)
'Kolla om personummret är rätt
IF persnr = "" THEN
errorForm "ange ett personnummer.", backpage
ELSE
IF Len(persnr) <> 10 THEN
errorForm "Felaktigt angivet personnummer Ange personnummret utan bindestreck totalt 10 siffror.", backpage
ELSE
persnr2 = persnr
For i = 0 to 8
k = Left(persnr2,1)
persnr2 = Right(persnr2,len(persnr2)-1)
k = k * ((i + 1) Mod 2 + 1 )
IF len(k) = 2 THEN
totalt = totalt + Int(Left(k,1)) + Int(Right(k,1))
ELSE
totalt = totalt + k
END IF
NEXT
IF Int(Right(totalt,1)) <> 0 THEN
sista = 10 - Int(Right(totalt,1))
ELSE
sista = 0
END IF
IF Cint(sista) = Cint(Right(persnr,1)) THEN
persnr = persnr
ELSE
errorForm "Felaktigt personummer.", backpage
END IF
END IF
END IF
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "^\d{6}-?\d{4}$"
if objRegExp.test( strText ) then
'Personnummret är korrekt
else
'Personnummret är inkorrekt
end if
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "^\d{6}-?\d{4}$"
if objRegExp.test( strText ) then
'Personnummret är korrekt
else
'Personnummret är inkorrekt
end if
Får man verkligen med kontrollen av kontrollsiffran i nummret då? Ovanstående kod kontrollerar väl bara att man skrivit 6siffror-4siffror?
Argh, nu fick du mig besatt att lära mig detta... skrev en funktion även fast du redan gjort en... ;)
Syntax:
public function IsValidIdentity(strNumber) 'As Booelan
dim strChar 'As String
dim intSum 'As Integer
dim intPartSum 'As Integer
dim objRegExp 'as regexp
dim i 'As Integer
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "^\d{6}-?\d{4}$"
if objRegExp.test( strNumber ) then
strNumber = replace( strNumber, "-", "" )
for i = 1 to 9
strChar = mid(strNumber, i, 1)
intPartSum = cint(strChar) * ( ( i mod 2 ) + 1 )
if len(cstr(intPartSum)) = 2 then
intPartSum = cint(mid( intPartSum, 1, 1)) + cint(mid(intPartSum, 2, 1))
end if
intSum = intSum + intPartSum
next
IsValidIdentity = right(strNumber,1) = right(10 - right(intSum,1), 1)
else
IsValidIdentity = false
end if
end function
Vide Jag är imponerad och på 37 minuter också, hur fasiken gör du? :bire
Kan säga att personnummer kollen är ett av de slutarbeten man kan välja att göra i programmeringsteknik på KTH.
Jag ska t.o.m spara den någonstans på hårddisken eftersom den verkar vara lite smartare gjord.
Dock är den kod om jag postade testad på 100-tals personnummer. Så den ska nog vara buggfri
Vide Jag är imponerad och på 37 minuter också, hur fasiken gör du? :bire
Kan säga att personnummer kollen är ett av de slutarbeten man kan välja att göra i programmeringsteknik på KTH.
Man tackar! :D
Är det ett slutarbete också? Det gäller bara att veta vilka metoder/funktioner man har att tillgå i det språk man använder. Då kanske man skulle kunna gå programmeringsteknik då. ;)
function verifyOrgId(n)
{
var re = new RegExp("^([0-9]{6})-([0-9]{4})$", "ig");
var ma = re.exec(n);
return (ma && (calculateCheckDigit(ma[1] + ma[2].substring(0,3)) == ma[2].charAt(3)));
}
function calculateCheckDigit(num)
{
var i, n, sum = 0, l;
num = num.toString();
l = num.length;
for(i = l - 1; i >= 0; i--)
{
n = parseInt(num.charAt(i)) * (2 - ((l + 3 - i) % 2));
sum += parseInt(Math.floor(n / 10) + (n % 10));
}
return (10 - (sum % 10)) % 10;
}
verifyOrgId fungerar lika bra för personnummer. :)
JScripts syntax är så jäkla mycket snyggare och luftigare. Nästan så man skulle vilja gå över till det i ASP.
Men det blir väl C# som också verkar bra och har denna syntax. :)
function verifyOrgId(n)
{
var re = new RegExp("^([0-9]{6})-([0-9]{4})$", "ig");
var ma = re.exec(n);
return (ma && (calculateCheckDigit(ma[1] + ma[2].substring(0,3)) == ma[2].charAt(3)));
}
Avviker tråden här lite, men jag är lite nyfiken bara... får organistaionsnummer endast vara udda om... tappade tråden när calculateCheckDigit(submatch[0] + 3 första i submatch[1])?
men detta leder bara till att personnumret som man matade in i funktionen får fel värde när funktionen är avslutad (alltså, funktionen returnerar nytt värde på StrNumber och jag vill ju ha kvar mitt tolvsiffriga nummer)
Någon som har något förslag på hur man skall gå tillväga?
public function IsValidIdentity(strNumber) 'As Booelan
dim strChar 'As String
dim intSum 'As Integer
dim intPartSum 'As Integer
dim objRegExp 'as regexp
dim i 'As Integer
set objRegExp = new RegExp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = [b]"^(19|20)?(\d{6}-?\d{4})$"[/b]
if objRegExp.test(strNumber) then
[b]
Dim myMatches
Set myMatches = objRegExp.Execute(strNumber)
strNumber = myMatches(0).SubMatches(1)[/b]
strNumber = replace(strNumber, "-", "")
for i = 1 to 9
strChar = mid(strNumber, i, 1)
intPartSum = cint(strChar) * ( ( i mod 2 ) + 1 )
if len(cstr(intPartSum)) = 2 then
intPartSum = cint(mid( intPartSum, 1, 1)) + cint(mid(intPartSum, 2, 1))
end if
intSum = intSum + intPartSum
next
IsValidIdentity = right(strNumber,1) = right(10 - right(intSum,1), 1)
else
IsValidIdentity = false
end if
end function
för att se 1900 och 2000-talet
268 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9