Avatar billede danm Nybegynder
09. april 2006 - 23:57 Der er 3 kommentarer og
1 løsning

CPR tjek

Hej

Er der nogen der tilfældigvis har CPR tjek (modulus 11 hedder den vist) som en kode jeg lige kan bruge i visual basic 2005?
Avatar billede erikjacobsen Ekspert
10. april 2006 - 00:04 #1
Det bliver nok ret hurtigt uaktuelt: http://www.cpr.dk/Index/dokumenter.asp?o=2&n=0&d=523&s=4
Avatar billede arne_v Ekspert
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
Avatar billede danm Nybegynder
13. april 2006 - 02:57 #3
ser lidt voldsomt ud...
Smid svar
Avatar billede arne_v Ekspert
13. april 2006 - 04:34 #4
den laver også lidt mere end modulus 11 checket
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester