Halloj. Tänkte bara kasta ut en fråga och se om någon har ett svar som jag kan FÖRSTÅ ang detta. Det borde väl vara resten vid en heltalsdivision som avses med remainder. nyttigt att veta: mod = modulus (vilket du hade i rubriken ;D ) = resten vid heltalsdivision Jaha!! Nu greppar jag det (tror jag, den spottar ut korrekta värden iaf). Tack för hjälpen.. :o) Johannes, I have this function I use in VB6, works fine and you should be able to port it into vb.net,Weighted Modulus 11 Formula
Jag vet inte riktigt vilken forumdel jag ska lägga detta i, men det ska in i en ASP-sida i slutet, så det får hamna här.
Jag håller på att göra en sida där jag behöver räkna ut checksiffror till en streckkod. Detta ska göras med i ämnet nämnda räkneform. Jag har följande tal som det ska multipliceras med: 8 6 4 2 3 5 9 7
Jag är med till viss grad. Jag har gjort som följer
<code>
strFirstCal = (facone*8) + (factwo*6) + (facthree*4) + (facfour*2) + (facfive*3) + (facsix*5) + (facseven*9) + (faceight*7)
strSecondCal = strFirstCal / 11
</code>
... precis som det står att man ska göra. Men NU kommer vi till delen jag inte begriper. Det står som
följer:
"The check digit is now calculated, using the remainder, according to certain rules:
If the remainder is zero, then the check digit is zero
If the remainder is 1, then the check digit is X
Otherwise subtract the remainder from 11 to give the check digit."
Vad menar de med remainder?? För som ett exempel gav där divisionen var 134/11 så blev produkten 12 vilket gav "remaindern" 2... Vaddå tv? Det blev ju 12, eller är jag helt ute och seglar?
Vore tacksam för hjälp.
/JohannesSv: Weighted Modulus 11 Formula
Resten vid en heltalsdivision får du fram så här:
<CODE>
remainder = 134 mod 11
</CODE>
Lycka till!
/PKSv: Weighted Modulus 11 Formula
Sv: Weighted Modulus 11 Formula
/JohannesSv: Weighted Modulus 11 Formula
call the function giving the type of check digit you want ( only / and 11 are supported in the function ) then if you you need to change the case clause as required.
Public Function GiveNumber(ByVal DigitType As Byte, ByVal WaybillToFinish As String) As String
' Paul Horsley TNT Developer
' Function is used by callers to assign a 9th digit to a number.
' If caller passes a number > 8 then it is truncated to 8
' Function that is passed 2 params.
' 1) Which type of check digit caller requests as byte
' 2) The callers 8 digit number to be assigned a check digit the number is passed as a string type variable.
' If caller passes paran two outside of either 7 or 11 then default result = "INV_CHECK" is passed back, use this to check call.
Dim tmpNumber, NewNumber, A1, A2, A3, A4, A5, A6, A7, A8, A9, Asum, Bsum, Csum, Dsum, Esum
tmpNumber = Trim(WaybillToFinish)
A1 = Mid(tmpNumber, 1, 1) * 8
A2 = Mid(tmpNumber, 2, 1) * 6
A3 = Mid(tmpNumber, 3, 1) * 4
A4 = Mid(tmpNumber, 4, 1) * 2
A5 = Mid(tmpNumber, 5, 1) * 3
A6 = Mid(tmpNumber, 6, 1) * 5
A7 = Mid(tmpNumber, 7, 1) * 9
A8 = Mid(tmpNumber, 8, 1) * 7
Select Case DigitType
Case 7 ' give back to caller a 9 digit waybill with 9th digit as check 7
Dsum = Int(Mid(tmpNumber, 1, 8) / 7) * 7
Esum = Mid(tmpNumber, 1, 8) - Dsum
GiveTNTWayBillNumber = Mid(tmpNumber, 1, 8) & Esum
Case 11 ' give back to caller a 9 digit waybill with 9th digit as check 11
Asum = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8
Bsum = Asum Mod 11
Select Case Bsum
Case 0
Csum = 5
Case 1
Csum = 0
Case Bsum
Csum = 11 - Bsum
End Select
GiveTNTWayBillNumber = CStr(tmpNumber) + CStr(Csum)
Case Else
GiveTNTWayBillNumber = "INV_CHECK"
End Select
End Function
cheers Paul