10. april 2006 - 00:40
#2
hvis du alligevel vel bruge det så er her noget kode (og hvis det ser lidt spørjst ud
så er det Java kode håndoversat til C# som er maskin oversat til VB.NET !):
Imports System
Namespace E
Public Class CPR
Private number As String
Public Sub New(ByVal number As String)
Me.number = number
End Sub
Public Function IsValid() As Boolean
Dim ix As Integer() = {0, 1, 2, 3, 4, 5, 7, 8, 9, 10}
Dim c As Integer() = {4, 3, 2, 7, 6, 5, 4, 3, 2, 1}
If Not (number.Length = 11) Then
Return False
End If
If Not (number.ToCharArray()(6) = "-"C) Then
Return False
End If
Dim i As Integer
For i = 0 To 9
If Not Char.IsDigit(number.ToCharArray()(ix(i))) Then
Return False
End If
Next
If dd > 31 Then
Return False
End If
If mm > 12 Then
Return False
End If
If century = 0 Then
Return False
End If
Dim temp As Integer = 0
For i = 0 To 9
temp = temp + c(i) * Integer.Parse(number.Substring(ix(i), 1))
Next
Return ((temp Mod 11) = 0)
End Function
Public Function IsMale() As Boolean
Return Integer.Parse(number.Substring(10, 1)) Mod 2 = 1
End Function
Public Function IsFemale() As Boolean
Return Integer.Parse(number.Substring(10, 1)) Mod 2 = 0
End Function
Private Function dd() As Integer
Return Integer.Parse(number.Substring(0, 2))
End Function
Private Function mm() As Integer
Return Integer.Parse(number.Substring(2, 2))
End Function
Private Function yy() As Integer
Return Integer.Parse(number.Substring(4, 2))
End Function
Private Function century() As Integer
Select number.ToCharArray()(7)
Case "0"C, "1"C, "2"C, "3"C
Return 1900
Case "4"C, "9"C
If yy < 37 Then
Return 2000
Else
Return 1900
End If
Case "5"C, "6"C, "7"C, "8"C
If yy < 37 Then
Return 2000
Else
If yy > 57 Then
Return 1800
Else
Return 0
End If
End If
Case Else
Return 0
End Select
End Function
End Class
Public Class TestClass
Private Shared Sub Test(ByVal s As String)
Dim nr As CPR = New CPR(s)
Console.WriteLine(s & " valid: " & nr.IsValid)
End Sub
Public Shared Sub Main(ByVal args As String())
Test("123456-1234")
Test("111111-1118")
End Sub
End Class
End Namespace