Avatar billede skildpadden Nybegynder
10. august 2003 - 13:45 Der er 11 kommentarer og
1 løsning

Modulus 10

Er der nogen der ved om man via asp kan lave udregninger med modulus 10?
Avatar billede erikjacobsen Ekspert
10. august 2003 - 13:50 #1
a = 17 mod 10
Avatar billede vbcoder Nybegynder
10. august 2003 - 13:52 #2
det kan du godt - finder lige noget til dig

//vbcoder
Avatar billede vbcoder Nybegynder
10. august 2003 - 13:52 #3
hvad skal du lave checkciffer på ?

//vbcoder
Avatar billede skildpadden Nybegynder
10. august 2003 - 13:54 #4
et betalingsID i en OCR-linie, f.eks. 00000000011490
Avatar billede vbcoder Nybegynder
10. august 2003 - 13:56 #5
Kode griffet fra en faktura database jeg har set et sted

Function GenererChecksumKode(varBetalingsId As Variant) As String

    ' generer et betalingsid udfra retningslinjer angivet på side 4, afsnit 3 i
    ' "Fremstilling af indbetalingskort +71<" fra PBS
   
    Dim strBetalingsId As String
    Dim lngResult As Long, lngFaktor As Long, lngCiffer As Long
    Dim i As Integer
   
    If IsNull(varBetalingsId) Then
        GenererChecksumKode = 0
    ElseIf (varBetalingsId = "") Then
        GenererChecksumKode = 0
    Else
        strBetalingsId = String(14 - Len(CStr(varBetalingsId)), "0") & varBetalingsId 'CStr(varBetalingsId)
       
        ' gennemløb betalingsid forfra, og multiplicer hvert ciffer med hhv. 2 og 1
        lngFaktor = IIf(Len(strBetalingsId) Mod 2 = 0, 1, 2)
       
        For i = 1 To Len(strBetalingsId)
           
            lngCiffer = CLng(Mid(strBetalingsId, i, 1))
            lngResult = lngResult + Tværsum(lngCiffer * lngFaktor)
            Debug.Print lngCiffer & ", " & lngFaktor & ", " & lngCiffer * lngFaktor & " (" & lngResult & ")"
       
            lngFaktor = IIf(lngFaktor = 2, 1, 2)  ' skiftevis 2 og 1
        Next
       
        If (lngResult Mod 10) = 0 Then
            GenererChecksumKode = strBetalingsId & "0"
        Else
            GenererChecksumKode = strBetalingsId & CStr(10 - (lngResult Mod 10))
        End If
           
    End If
   
End Function

Function Tværsum(lng As Long) As Long

    ' udregner tværsum for det givne tal
   
    Dim str As String
    Dim lngResult As Long, i As Integer
   
    str = CStr(lng)
   
    For i = 1 To Len(str)
        lngResult = lngResult + CLng(Mid(str, i, 1))
    Next
   
    Tværsum = lngResult
   
End Function

//vbcoder
Avatar billede vbcoder Nybegynder
10. august 2003 - 13:57 #6
det er visual basic kode

skal tilrettes en smule men ikke meget for asp - mere noget med variabel typer der ikke skal erklæres

//vbcoder
Avatar billede vbcoder Nybegynder
10. august 2003 - 14:02 #7
Samme kode tilpasset asp - du skal bare kalde

dim strOCR

strOCR = GenererChecksumKode(862525250212121)



Function GenererChecksumKode(varBetalingsId)

    ' generer et betalingsid udfra retningslinjer angivet på side 4, afsnit 3 i
    ' "Fremstilling af indbetalingskort +71<" fra PBS
   
    Dim strBetalingsId
    Dim lngResult, lngFaktor, lngCiffer
    Dim i
   
    If IsNull(varBetalingsId) Then
        GenererChecksumKode = 0
    ElseIf (varBetalingsId = "") Then
        GenererChecksumKode = 0
    Else
        strBetalingsId = String(14 - Len(CStr(varBetalingsId)), "0") & varBetalingsId       
        ' gennemløb betalingsid forfra, og multiplicer hvert ciffer med hhv. 2 og 1
        lngFaktor = IIf(Len(strBetalingsId) Mod 2 = 0, 1, 2)
       
        For i = 1 To Len(strBetalingsId)
           
            lngCiffer = CLng(Mid(strBetalingsId, i, 1))
            lngResult = lngResult + Tværsum(lngCiffer * lngFaktor)
            response.write lngCiffer & ", " & lngFaktor & ", " & lngCiffer * lngFaktor & " (" & lngResult & ")"
       
            lngFaktor = IIf(lngFaktor = 2, 1, 2)  ' skiftevis 2 og 1
        Next
       
        If (lngResult Mod 10) = 0 Then
            GenererChecksumKode = strBetalingsId & "0"
        Else
            GenererChecksumKode = strBetalingsId & CStr(10 - (lngResult Mod 10))
        End If
           
    End If
   
End Function

Function Tværsum(lng)

    ' udregner tværsum for det givne tal
   
    Dim str
    Dim lngResult, i
   
    str = CStr(lng)
   
    For i = 1 To Len(str)
        lngResult = lngResult + CLng(Mid(str, i, 1))
    Next
   
    Tværsum = lngResult
   
End Function

//vbcoder
Avatar billede skildpadden Nybegynder
10. august 2003 - 14:08 #8
Kan du ikke prøve at sætte den op så den anvender betalingsID 00000000011490?
Avatar billede vbcoder Nybegynder
10. august 2003 - 14:22 #9
Der skulle lige lidt mere tilretning til for asp - iif findes jo ej

kopier nedenstående i en asp fil

<%

Function GenererChecksumKode(varBetalingsId)

    ' generer et betalingsid udfra retningslinjer angivet på side 4, afsnit 3 i
    ' "Fremstilling af indbetalingskort +71<" fra PBS
   
    Dim strBetalingsId
    Dim lngResult, lngFaktor, lngCiffer
    Dim i
   
    If IsNull(varBetalingsId) Then
        GenererChecksumKode = 0
    ElseIf (varBetalingsId = "") Then
        GenererChecksumKode = 0
    Else
        strBetalingsId = String(14 - Len(CStr(varBetalingsId)), "0") & varBetalingsId       
        ' gennemløb betalingsid forfra, og multiplicer hvert ciffer med hhv. 2 og 1
        lngFaktor = IIf(Len(strBetalingsId) Mod 2 = 0, 1, 2)
       
        For i = 1 To Len(strBetalingsId)
           
            lngCiffer = CLng(Mid(strBetalingsId, i, 1))
            lngResult = lngResult + Tvaersum(lngCiffer * lngFaktor)
            'response.write lngCiffer & ", " & lngFaktor & ", " & lngCiffer * lngFaktor & " (" & lngResult & ")"
       
            lngFaktor = IIf(lngFaktor = 2, 1, 2)  ' skiftevis 2 og 1
        Next
       
        If (lngResult Mod 10) = 0 Then
            GenererChecksumKode = strBetalingsId & "0"
        Else
            GenererChecksumKode = strBetalingsId & CStr(10 - (lngResult Mod 10))
        End If
           
    End If
   
End Function

Function Tvaersum(lng)

    ' udregner tværsum for det givne tal
   
    Dim str
    Dim lngResult, i
   
    str = CStr(lng)
   
    For i = 1 To Len(str)
        lngResult = lngResult + CLng(Mid(str, i, 1))
    Next
   
    Tvaersum = lngResult
   
End Function

Function IIf(bResult, ReturnTrue, ReturnFalse)
    If bResult Then
        IIf = ReturnTrue
    Else
        IIf = ReturnFalse
    End If
End Function


'*********************************************************************************************

dim strOCR

strOCR = GenererChecksumKode(11490)

response.write(strOCR)

'*********************************************************************************************

%>

//vbcoder
Avatar billede vbcoder Nybegynder
10. august 2003 - 14:26 #10
Dette er svaret - jeg har test med flere ocr linjer fra mit eget bogholderi

Den laver det rigtige checkciffer hver gang

//vbcoder
Avatar billede skildpadden Nybegynder
10. august 2003 - 14:35 #11
Super - 1000-tak for hjælpen!
Avatar billede vbcoder Nybegynder
10. august 2003 - 14:38 #12
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