|
|
@@ -0,0 +1,917 @@ |
|
|
|
|
|
<% |
|
|
|
|
|
'============================================================================== |
|
|
|
|
|
' USPS Intelligent Mail Barcode (IMB) Encoder/Decoder Class |
|
|
|
|
|
' Based on USPS-B-3200 Specification |
|
|
|
|
|
'============================================================================== |
|
|
|
|
|
|
|
|
|
|
|
Class IMBCodec |
|
|
|
|
|
' Lookup tables |
|
|
|
|
|
Private Table5of13(1286) |
|
|
|
|
|
Private Table2of13(77) |
|
|
|
|
|
Private BarCharMap(64, 3) |
|
|
|
|
|
Private CharToCodeword |
|
|
|
|
|
Private IsInitialized |
|
|
|
|
|
|
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
' Constructor |
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
Private Sub Class_Initialize() |
|
|
|
|
|
Set CharToCodeword = CreateObject("Scripting.Dictionary") |
|
|
|
|
|
IsInitialized = False |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Sub Class_Terminate() |
|
|
|
|
|
Set CharToCodeword = Nothing |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
' Public Methods |
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
|
|
|
|
|
|
' Encode tracking and routing codes to IMB barcode string |
|
|
|
|
|
Public Function Encode(ByVal trackingCode, ByVal routingCode) |
|
|
|
|
|
If Not IsInitialized Then Call InitializeTables() |
|
|
|
|
|
|
|
|
|
|
|
Dim binaryData, crc, codewords(9), characters(9), i |
|
|
|
|
|
|
|
|
|
|
|
' Step 1: Convert to binary |
|
|
|
|
|
binaryData = ConvertToBinary(trackingCode, routingCode) |
|
|
|
|
|
|
|
|
|
|
|
' Step 2: Generate CRC |
|
|
|
|
|
crc = GenerateCRC(binaryData) |
|
|
|
|
|
|
|
|
|
|
|
' Step 3: Convert binary to codewords |
|
|
|
|
|
Call BinaryToCodewords(binaryData, codewords) |
|
|
|
|
|
|
|
|
|
|
|
' Step 4: Insert additional information |
|
|
|
|
|
Call InsertAdditionalInfo(codewords, crc) |
|
|
|
|
|
|
|
|
|
|
|
' Step 5: Convert codewords to characters |
|
|
|
|
|
Call CodewordsToCharacters(codewords, characters, crc) |
|
|
|
|
|
|
|
|
|
|
|
' Step 6: Convert characters to barcode |
|
|
|
|
|
Encode = CharactersToBarcode(characters) |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
' Encode combined IMB digits (20-digit tracking + 0/5/9/11-digit routing) to barcode string |
|
|
|
|
|
Public Function EncodeDigits(ByVal imbDigits) |
|
|
|
|
|
Dim tracking, routing |
|
|
|
|
|
imbDigits = Trim(imbDigits) |
|
|
|
|
|
tracking = Left(imbDigits, 20) |
|
|
|
|
|
routing = Mid(imbDigits, 21) |
|
|
|
|
|
EncodeDigits = Encode(tracking, routing) |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
' Decode IMB barcode string to tracking and routing codes |
|
|
|
|
|
Public Function Decode(ByVal barcode, ByRef trackingCode, ByRef routingCode, ByRef errMsg) |
|
|
|
|
|
If Not IsInitialized Then Call InitializeTables() |
|
|
|
|
|
|
|
|
|
|
|
Decode = False |
|
|
|
|
|
trackingCode = "" |
|
|
|
|
|
routingCode = "" |
|
|
|
|
|
errMsg = "" |
|
|
|
|
|
|
|
|
|
|
|
' Validate barcode |
|
|
|
|
|
If Len(barcode) <> 65 Then |
|
|
|
|
|
errMsg = "Invalid length (expected 65, got " & Len(barcode) & ")" |
|
|
|
|
|
Exit Function |
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
Dim i, ch |
|
|
|
|
|
For i = 1 To 65 |
|
|
|
|
|
ch = Mid(barcode, i, 1) |
|
|
|
|
|
If ch <> "A" And ch <> "D" And ch <> "T" And ch <> "F" Then |
|
|
|
|
|
errMsg = "Invalid character at pos " & i & ": " & ch |
|
|
|
|
|
Exit Function |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
On Error Resume Next |
|
|
|
|
|
Call DecodeInternal(barcode, trackingCode, routingCode, errMsg) |
|
|
|
|
|
If Err.Number <> 0 Then |
|
|
|
|
|
errMsg = "Decode error (" & Err.Number & "): " & Err.Description |
|
|
|
|
|
Err.Clear |
|
|
|
|
|
On Error GoTo 0 |
|
|
|
|
|
Exit Function |
|
|
|
|
|
End If |
|
|
|
|
|
On Error GoTo 0 |
|
|
|
|
|
|
|
|
|
|
|
If Len(trackingCode) = 0 And Len(routingCode) = 0 Then |
|
|
|
|
|
If Len(errMsg) = 0 Then errMsg = "Decode failed" |
|
|
|
|
|
Exit Function |
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
Decode = True |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
' Private Encoding Methods |
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
|
|
|
|
|
|
Private Function ConvertToBinary(tracking, routing) |
|
|
|
|
|
Dim routingArr, i, digit |
|
|
|
|
|
Dim binaryData(12) |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
binaryData(i) = 0 |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
routingArr = ConvertRoutingCode(routing) |
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
binaryData(i) = routingArr(i) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To Len(tracking) - 1 |
|
|
|
|
|
digit = CLng(Mid(tracking, i + 1, 1)) |
|
|
|
|
|
If i = 0 Then |
|
|
|
|
|
Call MultiplyAndAdd(binaryData, 10, digit) |
|
|
|
|
|
ElseIf i = 1 Then |
|
|
|
|
|
Call MultiplyAndAdd(binaryData, 5, digit) |
|
|
|
|
|
Else |
|
|
|
|
|
Call MultiplyAndAdd(binaryData, 10, digit) |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
ConvertToBinary = binaryData |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Function ConvertRoutingCode(routing) |
|
|
|
|
|
Dim result(12), i |
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
result(i) = 0 |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
Select Case Len(routing) |
|
|
|
|
|
Case 0 |
|
|
|
|
|
' result already 0 |
|
|
|
|
|
Case 5 |
|
|
|
|
|
Call AddStringToArray(result, routing) |
|
|
|
|
|
Call AddValueToArray(result, 1) |
|
|
|
|
|
Case 9 |
|
|
|
|
|
Call AddStringToArray(result, routing) |
|
|
|
|
|
Call AddValueToArray(result, 100001) |
|
|
|
|
|
Case 11 |
|
|
|
|
|
Call AddStringToArray(result, routing) |
|
|
|
|
|
Call AddValueToArray(result, 1) |
|
|
|
|
|
Call AddValueToArray(result, 1000000000) |
|
|
|
|
|
Call AddValueToArray(result, 100000) |
|
|
|
|
|
End Select |
|
|
|
|
|
|
|
|
|
|
|
ConvertRoutingCode = result |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Sub AddStringToArray(ByRef arr, numStr) |
|
|
|
|
|
Dim i, digit |
|
|
|
|
|
For i = 1 To Len(numStr) |
|
|
|
|
|
digit = CLng(Mid(numStr, i, 1)) |
|
|
|
|
|
Call MultiplyAndAdd(arr, 10, digit) |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Sub AddValueToArray(ByRef arr, value) |
|
|
|
|
|
Dim i, carry, temp |
|
|
|
|
|
carry = value |
|
|
|
|
|
|
|
|
|
|
|
For i = 12 To 0 Step -1 |
|
|
|
|
|
If carry = 0 Then Exit For |
|
|
|
|
|
temp = arr(i) + (carry Mod 256) |
|
|
|
|
|
arr(i) = temp Mod 256 |
|
|
|
|
|
carry = Int(carry / 256) + Int(temp / 256) |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Sub MultiplyAndAdd(ByRef arr, mult, add) |
|
|
|
|
|
Dim i, carry, temp |
|
|
|
|
|
carry = add |
|
|
|
|
|
|
|
|
|
|
|
For i = 12 To 0 Step -1 |
|
|
|
|
|
temp = CLng(arr(i)) * mult + carry |
|
|
|
|
|
arr(i) = temp And &HFF |
|
|
|
|
|
carry = Int(temp / 256) |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Function GenerateCRC(binaryData) |
|
|
|
|
|
Dim fcs, data, bit, i, byteIdx, genPoly |
|
|
|
|
|
|
|
|
|
|
|
genPoly = &HF35 |
|
|
|
|
|
fcs = &H7FF |
|
|
|
|
|
|
|
|
|
|
|
data = (binaryData(0) And &H3F) * 32 |
|
|
|
|
|
For bit = 2 To 7 |
|
|
|
|
|
If ((fcs Xor data) And &H400) <> 0 Then |
|
|
|
|
|
fcs = ((fcs * 2) Xor genPoly) And &H7FF |
|
|
|
|
|
Else |
|
|
|
|
|
fcs = (fcs * 2) And &H7FF |
|
|
|
|
|
End If |
|
|
|
|
|
data = (data * 2) And &H7FF |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
For byteIdx = 1 To 12 |
|
|
|
|
|
data = binaryData(byteIdx) * 8 |
|
|
|
|
|
For bit = 0 To 7 |
|
|
|
|
|
If ((fcs Xor data) And &H400) <> 0 Then |
|
|
|
|
|
fcs = ((fcs * 2) Xor genPoly) And &H7FF |
|
|
|
|
|
Else |
|
|
|
|
|
fcs = (fcs * 2) And &H7FF |
|
|
|
|
|
End If |
|
|
|
|
|
data = (data * 2) And &H7FF |
|
|
|
|
|
Next |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
GenerateCRC = fcs |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Sub BinaryToCodewords(binaryData, ByRef codewords) |
|
|
|
|
|
Dim quotient(12), i |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
quotient(i) = binaryData(i) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
codewords(9) = DivideArray(quotient, 636) |
|
|
|
|
|
codewords(8) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(7) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(6) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(5) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(4) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(3) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(2) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(1) = DivideArray(quotient, 1365) |
|
|
|
|
|
codewords(0) = ArrayToInt(quotient) |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Function DivideArray(ByRef arr, divisor) |
|
|
|
|
|
Dim i, temp, remainder |
|
|
|
|
|
remainder = 0 |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
temp = CLng(remainder) * 256 + CLng(arr(i)) |
|
|
|
|
|
arr(i) = Int(temp / divisor) |
|
|
|
|
|
remainder = temp Mod divisor |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
DivideArray = remainder |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Function ArrayToInt(arr) |
|
|
|
|
|
Dim val, i |
|
|
|
|
|
val = 0 |
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
If arr(i) <> 0 OR val <> 0 Then |
|
|
|
|
|
val = val * 256 + arr(i) |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
ArrayToInt = val |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Sub InsertAdditionalInfo(ByRef codewords, crc) |
|
|
|
|
|
codewords(9) = codewords(9) * 2 |
|
|
|
|
|
If (crc And &H400) <> 0 Then |
|
|
|
|
|
codewords(0) = codewords(0) + 659 |
|
|
|
|
|
End If |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Sub CodewordsToCharacters(codewords, ByRef characters, crc) |
|
|
|
|
|
Dim i, cw, ch |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 9 |
|
|
|
|
|
cw = codewords(i) |
|
|
|
|
|
|
|
|
|
|
|
If cw <= 1286 Then |
|
|
|
|
|
ch = Table5of13(cw) |
|
|
|
|
|
Else |
|
|
|
|
|
ch = Table2of13(cw - 1287) |
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
If (crc And (2 ^ i)) <> 0 Then |
|
|
|
|
|
ch = ch Xor &H1FFF |
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
characters(i) = ch |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Function CharactersToBarcode(characters) |
|
|
|
|
|
Dim bars(64), i, ascCharIdx, ascBitIdx, descCharIdx, descBitIdx |
|
|
|
|
|
Dim ascVal, descVal, barcode |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 64 |
|
|
|
|
|
ascCharIdx = BarCharMap(i, 2) |
|
|
|
|
|
ascBitIdx = BarCharMap(i, 3) |
|
|
|
|
|
ascVal = (characters(ascCharIdx) And (2 ^ ascBitIdx)) <> 0 |
|
|
|
|
|
|
|
|
|
|
|
descCharIdx = BarCharMap(i, 0) |
|
|
|
|
|
descBitIdx = BarCharMap(i, 1) |
|
|
|
|
|
descVal = (characters(descCharIdx) And (2 ^ descBitIdx)) <> 0 |
|
|
|
|
|
|
|
|
|
|
|
If ascVal And descVal Then |
|
|
|
|
|
bars(i) = "F" |
|
|
|
|
|
ElseIf ascVal And Not descVal Then |
|
|
|
|
|
bars(i) = "A" |
|
|
|
|
|
ElseIf descVal And Not ascVal Then |
|
|
|
|
|
bars(i) = "D" |
|
|
|
|
|
Else |
|
|
|
|
|
bars(i) = "T" |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
barcode = "" |
|
|
|
|
|
For i = 0 To 64 |
|
|
|
|
|
barcode = barcode & bars(i) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
CharactersToBarcode = barcode |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
' Private Decoding Methods |
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
|
|
|
|
|
|
Private Sub DecodeInternal(barcode, ByRef trackingCode, ByRef routingCode, ByRef errMsg) |
|
|
|
|
|
Dim characters(9), codewords(9), binaryData, fcs |
|
|
|
|
|
|
|
|
|
|
|
errMsg = "" |
|
|
|
|
|
trackingCode = "" |
|
|
|
|
|
routingCode = "" |
|
|
|
|
|
|
|
|
|
|
|
Call BarcodeToCharacters(barcode, characters) |
|
|
|
|
|
fcs = CharactersToCodewords(characters, codewords, errMsg) |
|
|
|
|
|
If fcs = -1 Then Exit Sub |
|
|
|
|
|
|
|
|
|
|
|
Call ExtractAdditionalInfo(codewords, fcs) |
|
|
|
|
|
binaryData = CodewordsToBinary(codewords) |
|
|
|
|
|
Call BinaryToFields(binaryData, trackingCode, routingCode) |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Sub BarcodeToCharacters(barcode, ByRef characters) |
|
|
|
|
|
Dim i, charIdx, bitIdx, bar |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 9 |
|
|
|
|
|
characters(i) = 0 |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 64 |
|
|
|
|
|
bar = Mid(barcode, i + 1, 1) |
|
|
|
|
|
|
|
|
|
|
|
charIdx = BarCharMap(i, 2) |
|
|
|
|
|
bitIdx = BarCharMap(i, 3) |
|
|
|
|
|
If bar = "A" Or bar = "F" Then |
|
|
|
|
|
characters(charIdx) = characters(charIdx) Or (2 ^ bitIdx) |
|
|
|
|
|
End If |
|
|
|
|
|
|
|
|
|
|
|
charIdx = BarCharMap(i, 0) |
|
|
|
|
|
bitIdx = BarCharMap(i, 1) |
|
|
|
|
|
If bar = "D" Or bar = "F" Then |
|
|
|
|
|
characters(charIdx) = characters(charIdx) Or (2 ^ bitIdx) |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Function CharactersToCodewords(ByRef characters, ByRef codewords, ByRef errMsg) |
|
|
|
|
|
Dim fcs, i, ch, cw, comp |
|
|
|
|
|
fcs = 0 |
|
|
|
|
|
errMsg = "" |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 9 |
|
|
|
|
|
ch = characters(i) And &H1FFF |
|
|
|
|
|
|
|
|
|
|
|
cw = FindCodeword(ch) |
|
|
|
|
|
If cw <> -1 Then |
|
|
|
|
|
codewords(i) = cw |
|
|
|
|
|
Else |
|
|
|
|
|
comp = ch Xor &H1FFF |
|
|
|
|
|
cw = FindCodeword(comp) |
|
|
|
|
|
If cw = -1 Then |
|
|
|
|
|
errMsg = "Invalid IMB character idx=" & i & " value=0x" & Hex(ch) |
|
|
|
|
|
CharactersToCodewords = -1 |
|
|
|
|
|
Exit Function |
|
|
|
|
|
End If |
|
|
|
|
|
fcs = fcs Or CLng(2 ^ i) |
|
|
|
|
|
codewords(i) = cw |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
CharactersToCodewords = fcs |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Function FindCodeword(character) |
|
|
|
|
|
Dim key |
|
|
|
|
|
key = CStr(character And &H1FFF) |
|
|
|
|
|
|
|
|
|
|
|
If CharToCodeword.Exists(key) Then |
|
|
|
|
|
FindCodeword = CLng(CharToCodeword(key)) |
|
|
|
|
|
Else |
|
|
|
|
|
FindCodeword = -1 |
|
|
|
|
|
End If |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Sub ExtractAdditionalInfo(ByRef codewords, ByRef fcs) |
|
|
|
|
|
If codewords(0) >= 659 Then |
|
|
|
|
|
codewords(0) = codewords(0) - 659 |
|
|
|
|
|
fcs = fcs Or &H400 |
|
|
|
|
|
End If |
|
|
|
|
|
codewords(9) = codewords(9) \ 2 |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Function CodewordsToBinary(ByRef codewords) |
|
|
|
|
|
Dim binaryData(12), i |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
binaryData(i) = 0 |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
Call IntToArray(binaryData, codewords(0)) |
|
|
|
|
|
|
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(1)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(2)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(3)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(4)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(5)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(6)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(7)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 1365) : Call AddValueToArray(binaryData, codewords(8)) |
|
|
|
|
|
Call MultiplyArrayByValue(binaryData, 636) : Call AddValueToArray(binaryData, codewords(9)) |
|
|
|
|
|
|
|
|
|
|
|
CodewordsToBinary = binaryData |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Sub MultiplyArrayByValue(ByRef arr, mult) |
|
|
|
|
|
Dim i, carry, temp |
|
|
|
|
|
carry = 0 |
|
|
|
|
|
For i = 12 To 0 Step -1 |
|
|
|
|
|
temp = CLng(arr(i)) * mult + carry |
|
|
|
|
|
arr(i) = temp And &HFF |
|
|
|
|
|
carry = Int(temp / 256) |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Sub IntToArray(ByRef arr, value) |
|
|
|
|
|
Dim i |
|
|
|
|
|
For i = 12 To 0 Step -1 |
|
|
|
|
|
arr(i) = value And &HFF |
|
|
|
|
|
value = Int(value / 256) |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Sub BinaryToFields(binaryData, ByRef trackingCode, ByRef routingCode) |
|
|
|
|
|
Dim workData(12), i, trackDigits(19), routingValue |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
workData(i) = binaryData(i) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
For i = 19 To 2 Step -1 |
|
|
|
|
|
trackDigits(i) = DivideArray(workData, 10) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
trackDigits(1) = DivideArray(workData, 5) |
|
|
|
|
|
trackDigits(0) = DivideArray(workData, 10) |
|
|
|
|
|
|
|
|
|
|
|
routingValue = ArrayToDouble(workData) |
|
|
|
|
|
|
|
|
|
|
|
trackingCode = "" |
|
|
|
|
|
For i = 0 To 19 |
|
|
|
|
|
trackingCode = trackingCode & trackDigits(i) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
If routingValue = 0 Then |
|
|
|
|
|
routingCode = "" |
|
|
|
|
|
ElseIf routingValue <= 100000 Then |
|
|
|
|
|
routingValue = routingValue - 1 |
|
|
|
|
|
routingCode = Right("00000" & CLng(routingValue), 5) |
|
|
|
|
|
ElseIf routingValue <= 1000100000 Then |
|
|
|
|
|
routingValue = routingValue - 100001 |
|
|
|
|
|
routingCode = Right("000000000" & CStr(CLng(routingValue)), 9) |
|
|
|
|
|
Else |
|
|
|
|
|
routingCode = BuildRoutingString(workData) |
|
|
|
|
|
End If |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Function BuildRoutingString(arr) |
|
|
|
|
|
Dim tempArr(12), i, digits(10), j, result |
|
|
|
|
|
|
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
tempArr(i) = arr(i) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
Call SubtractValue(tempArr, 1000100001) |
|
|
|
|
|
|
|
|
|
|
|
For j = 10 To 0 Step -1 |
|
|
|
|
|
digits(j) = DivideArray(tempArr, 10) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
result = "" |
|
|
|
|
|
For j = 0 To 10 |
|
|
|
|
|
result = result & digits(j) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
BuildRoutingString = result |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
Private Sub SubtractValue(ByRef arr, value) |
|
|
|
|
|
Dim i, borrow, temp |
|
|
|
|
|
borrow = value |
|
|
|
|
|
|
|
|
|
|
|
For i = 12 To 0 Step -1 |
|
|
|
|
|
If borrow = 0 Then Exit Sub |
|
|
|
|
|
temp = CLng(arr(i)) - (borrow And &HFF) |
|
|
|
|
|
If temp < 0 Then |
|
|
|
|
|
arr(i) = temp + 256 |
|
|
|
|
|
borrow = Int(borrow / 256) + 1 |
|
|
|
|
|
Else |
|
|
|
|
|
arr(i) = temp |
|
|
|
|
|
borrow = Int(borrow / 256) |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
End Sub |
|
|
|
|
|
|
|
|
|
|
|
Private Function ArrayToDouble(arr) |
|
|
|
|
|
Dim result, i |
|
|
|
|
|
result = CDbl(0) |
|
|
|
|
|
For i = 0 To 12 |
|
|
|
|
|
If arr(i) <> 0 Or result <> 0 Then |
|
|
|
|
|
result = result * 256 + CDbl(arr(i)) |
|
|
|
|
|
End If |
|
|
|
|
|
Next |
|
|
|
|
|
ArrayToDouble = result |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
' Initialize Lookup Tables |
|
|
|
|
|
'============================================================================ |
|
|
|
|
|
Private Sub InitializeTables() |
|
|
|
|
|
Dim i |
|
|
|
|
|
|
|
|
|
|
|
' Table 19: 5 of 13 Characters (1287 entries) - abbreviated for space |
|
|
|
|
|
Table5of13(0)=31:Table5of13(1)=7936:Table5of13(2)=47:Table5of13(3)=7808:Table5of13(4)=55 |
|
|
|
|
|
Table5of13(5)=7552:Table5of13(6)=59:Table5of13(7)=7040:Table5of13(8)=61:Table5of13(9)=6016 |
|
|
|
|
|
Table5of13(10)=62:Table5of13(11)=3968:Table5of13(12)=79:Table5of13(13)=7744:Table5of13(14)=87 |
|
|
|
|
|
Table5of13(15)=7488:Table5of13(16)=91:Table5of13(17)=6976:Table5of13(18)=93:Table5of13(19)=5952 |
|
|
|
|
|
Table5of13(20)=94:Table5of13(21)=3904:Table5of13(22)=103:Table5of13(23)=7360:Table5of13(24)=107 |
|
|
|
|
|
Table5of13(25)=6848:Table5of13(26)=109:Table5of13(27)=5824:Table5of13(28)=110:Table5of13(29)=3776 |
|
|
|
|
|
Table5of13(30)=115:Table5of13(31)=6592:Table5of13(32)=117:Table5of13(33)=5568:Table5of13(34)=118 |
|
|
|
|
|
Table5of13(35)=3520:Table5of13(36)=121:Table5of13(37)=5056:Table5of13(38)=122:Table5of13(39)=3008 |
|
|
|
|
|
Table5of13(40)=124:Table5of13(41)=1984:Table5of13(42)=143:Table5of13(43)=7712:Table5of13(44)=151 |
|
|
|
|
|
Table5of13(45)=7456:Table5of13(46)=155:Table5of13(47)=6944:Table5of13(48)=157:Table5of13(49)=5920 |
|
|
|
|
|
Table5of13(50)=158:Table5of13(51)=3872:Table5of13(52)=167:Table5of13(53)=7328:Table5of13(54)=171 |
|
|
|
|
|
Table5of13(55)=6816:Table5of13(56)=173:Table5of13(57)=5792:Table5of13(58)=174:Table5of13(59)=3744 |
|
|
|
|
|
Table5of13(60)=179:Table5of13(61)=6560:Table5of13(62)=181:Table5of13(63)=5536:Table5of13(64)=182 |
|
|
|
|
|
Table5of13(65)=3488:Table5of13(66)=185:Table5of13(67)=5024:Table5of13(68)=186:Table5of13(69)=2976 |
|
|
|
|
|
Table5of13(70)=188:Table5of13(71)=1952:Table5of13(72)=199:Table5of13(73)=7264:Table5of13(74)=203 |
|
|
|
|
|
Table5of13(75)=6752:Table5of13(76)=205:Table5of13(77)=5728:Table5of13(78)=206:Table5of13(79)=3680 |
|
|
|
|
|
Table5of13(80)=211:Table5of13(81)=6496:Table5of13(82)=213:Table5of13(83)=5472:Table5of13(84)=214 |
|
|
|
|
|
Table5of13(85)=3424:Table5of13(86)=217:Table5of13(87)=4960:Table5of13(88)=218:Table5of13(89)=2912 |
|
|
|
|
|
Table5of13(90)=220:Table5of13(91)=1888:Table5of13(92)=227:Table5of13(93)=6368:Table5of13(94)=229 |
|
|
|
|
|
Table5of13(95)=5344:Table5of13(96)=230:Table5of13(97)=3296:Table5of13(98)=233:Table5of13(99)=4832 |
|
|
|
|
|
Table5of13(100)=234:Table5of13(101)=2784:Table5of13(102)=236:Table5of13(103)=1760:Table5of13(104)=241 |
|
|
|
|
|
Table5of13(105)=4576:Table5of13(106)=242:Table5of13(107)=2528:Table5of13(108)=244:Table5of13(109)=1504 |
|
|
|
|
|
Table5of13(110)=248:Table5of13(111)=992:Table5of13(112)=271:Table5of13(113)=7696:Table5of13(114)=279 |
|
|
|
|
|
Table5of13(115)=7440:Table5of13(116)=283:Table5of13(117)=6928:Table5of13(118)=285:Table5of13(119)=5904 |
|
|
|
|
|
Table5of13(120)=286:Table5of13(121)=3856:Table5of13(122)=295:Table5of13(123)=7312:Table5of13(124)=299 |
|
|
|
|
|
Table5of13(125)=6800:Table5of13(126)=301:Table5of13(127)=5776:Table5of13(128)=302:Table5of13(129)=3728 |
|
|
|
|
|
Table5of13(130)=307:Table5of13(131)=6544:Table5of13(132)=309:Table5of13(133)=5520:Table5of13(134)=310 |
|
|
|
|
|
Table5of13(135)=3472:Table5of13(136)=313:Table5of13(137)=5008:Table5of13(138)=314:Table5of13(139)=2960 |
|
|
|
|
|
Table5of13(140)=316:Table5of13(141)=1936:Table5of13(142)=327:Table5of13(143)=7248:Table5of13(144)=331 |
|
|
|
|
|
Table5of13(145)=6736:Table5of13(146)=333:Table5of13(147)=5712:Table5of13(148)=334:Table5of13(149)=3664 |
|
|
|
|
|
Table5of13(150)=339:Table5of13(151)=6480:Table5of13(152)=341:Table5of13(153)=5456:Table5of13(154)=342 |
|
|
|
|
|
Table5of13(155)=3408:Table5of13(156)=345:Table5of13(157)=4944:Table5of13(158)=346:Table5of13(159)=2896 |
|
|
|
|
|
Table5of13(160)=348:Table5of13(161)=1872:Table5of13(162)=355:Table5of13(163)=6352:Table5of13(164)=357 |
|
|
|
|
|
Table5of13(165)=5328:Table5of13(166)=358:Table5of13(167)=3280:Table5of13(168)=361:Table5of13(169)=4816 |
|
|
|
|
|
Table5of13(170)=362:Table5of13(171)=2768:Table5of13(172)=364:Table5of13(173)=1744:Table5of13(174)=369 |
|
|
|
|
|
Table5of13(175)=4560:Table5of13(176)=370:Table5of13(177)=2512:Table5of13(178)=372:Table5of13(179)=1488 |
|
|
|
|
|
Table5of13(180)=376:Table5of13(181)=976:Table5of13(182)=391:Table5of13(183)=7216:Table5of13(184)=395 |
|
|
|
|
|
Table5of13(185)=6704:Table5of13(186)=397:Table5of13(187)=5680:Table5of13(188)=398:Table5of13(189)=3632 |
|
|
|
|
|
Table5of13(190)=403:Table5of13(191)=6448:Table5of13(192)=405:Table5of13(193)=5424:Table5of13(194)=406 |
|
|
|
|
|
Table5of13(195)=3376:Table5of13(196)=409:Table5of13(197)=4912:Table5of13(198)=410:Table5of13(199)=2864 |
|
|
|
|
|
Table5of13(200)=412:Table5of13(201)=1840:Table5of13(202)=419:Table5of13(203)=6320:Table5of13(204)=421 |
|
|
|
|
|
Table5of13(205)=5296:Table5of13(206)=422:Table5of13(207)=3248:Table5of13(208)=425:Table5of13(209)=4784 |
|
|
|
|
|
Table5of13(210)=426:Table5of13(211)=2736:Table5of13(212)=428:Table5of13(213)=1712:Table5of13(214)=433 |
|
|
|
|
|
Table5of13(215)=4528:Table5of13(216)=434:Table5of13(217)=2480:Table5of13(218)=436:Table5of13(219)=1456 |
|
|
|
|
|
Table5of13(220)=440:Table5of13(221)=944:Table5of13(222)=451:Table5of13(223)=6256:Table5of13(224)=453 |
|
|
|
|
|
Table5of13(225)=5232:Table5of13(226)=454:Table5of13(227)=3184:Table5of13(228)=457:Table5of13(229)=4720 |
|
|
|
|
|
Table5of13(230)=458:Table5of13(231)=2672:Table5of13(232)=460:Table5of13(233)=1648:Table5of13(234)=465 |
|
|
|
|
|
Table5of13(235)=4464:Table5of13(236)=466:Table5of13(237)=2416:Table5of13(238)=468:Table5of13(239)=1392 |
|
|
|
|
|
Table5of13(240)=472:Table5of13(241)=880:Table5of13(242)=481:Table5of13(243)=4336:Table5of13(244)=482 |
|
|
|
|
|
Table5of13(245)=2288:Table5of13(246)=484:Table5of13(247)=1264:Table5of13(248)=488:Table5of13(249)=752 |
|
|
|
|
|
Table5of13(250)=527:Table5of13(251)=7688:Table5of13(252)=535:Table5of13(253)=7432:Table5of13(254)=539 |
|
|
|
|
|
Table5of13(255)=6920:Table5of13(256)=541:Table5of13(257)=5896:Table5of13(258)=542:Table5of13(259)=3848 |
|
|
|
|
|
Table5of13(260)=551:Table5of13(261)=7304:Table5of13(262)=555:Table5of13(263)=6792:Table5of13(264)=557 |
|
|
|
|
|
Table5of13(265)=5768:Table5of13(266)=558:Table5of13(267)=3720:Table5of13(268)=563:Table5of13(269)=6536 |
|
|
|
|
|
Table5of13(270)=565:Table5of13(271)=5512:Table5of13(272)=566:Table5of13(273)=3464:Table5of13(274)=569 |
|
|
|
|
|
Table5of13(275)=5000:Table5of13(276)=570:Table5of13(277)=2952:Table5of13(278)=572:Table5of13(279)=1928 |
|
|
|
|
|
Table5of13(280)=583:Table5of13(281)=7240:Table5of13(282)=587:Table5of13(283)=6728:Table5of13(284)=589 |
|
|
|
|
|
Table5of13(285)=5704:Table5of13(286)=590:Table5of13(287)=3656:Table5of13(288)=595:Table5of13(289)=6472 |
|
|
|
|
|
Table5of13(290)=597:Table5of13(291)=5448:Table5of13(292)=598:Table5of13(293)=3400:Table5of13(294)=601 |
|
|
|
|
|
Table5of13(295)=4936:Table5of13(296)=602:Table5of13(297)=2888:Table5of13(298)=604:Table5of13(299)=1864 |
|
|
|
|
|
Table5of13(300)=611:Table5of13(301)=6344:Table5of13(302)=613:Table5of13(303)=5320:Table5of13(304)=614 |
|
|
|
|
|
Table5of13(305)=3272:Table5of13(306)=617:Table5of13(307)=4808:Table5of13(308)=618:Table5of13(309)=2760 |
|
|
|
|
|
Table5of13(310)=620:Table5of13(311)=1736:Table5of13(312)=625:Table5of13(313)=4552:Table5of13(314)=626 |
|
|
|
|
|
Table5of13(315)=2504:Table5of13(316)=628:Table5of13(317)=1480:Table5of13(318)=632:Table5of13(319)=968 |
|
|
|
|
|
Table5of13(320)=647:Table5of13(321)=7208:Table5of13(322)=651:Table5of13(323)=6696:Table5of13(324)=653 |
|
|
|
|
|
Table5of13(325)=5672:Table5of13(326)=654:Table5of13(327)=3624:Table5of13(328)=659:Table5of13(329)=6440 |
|
|
|
|
|
Table5of13(330)=661:Table5of13(331)=5416:Table5of13(332)=662:Table5of13(333)=3368:Table5of13(334)=665 |
|
|
|
|
|
Table5of13(335)=4904:Table5of13(336)=666:Table5of13(337)=2856:Table5of13(338)=668:Table5of13(339)=1832 |
|
|
|
|
|
Table5of13(340)=675:Table5of13(341)=6312:Table5of13(342)=677:Table5of13(343)=5288:Table5of13(344)=678 |
|
|
|
|
|
Table5of13(345)=3240:Table5of13(346)=681:Table5of13(347)=4776:Table5of13(348)=682:Table5of13(349)=2728 |
|
|
|
|
|
Table5of13(350)=684:Table5of13(351)=1704:Table5of13(352)=689:Table5of13(353)=4520:Table5of13(354)=690 |
|
|
|
|
|
Table5of13(355)=2472:Table5of13(356)=692:Table5of13(357)=1448:Table5of13(358)=696:Table5of13(359)=936 |
|
|
|
|
|
Table5of13(360)=707:Table5of13(361)=6248:Table5of13(362)=709:Table5of13(363)=5224:Table5of13(364)=710 |
|
|
|
|
|
Table5of13(365)=3176:Table5of13(366)=713:Table5of13(367)=4712:Table5of13(368)=714:Table5of13(369)=2664 |
|
|
|
|
|
Table5of13(370)=716:Table5of13(371)=1640:Table5of13(372)=721:Table5of13(373)=4456:Table5of13(374)=722 |
|
|
|
|
|
Table5of13(375)=2408:Table5of13(376)=724:Table5of13(377)=1384:Table5of13(378)=728:Table5of13(379)=872 |
|
|
|
|
|
Table5of13(380)=737:Table5of13(381)=4328:Table5of13(382)=738:Table5of13(383)=2280:Table5of13(384)=740 |
|
|
|
|
|
Table5of13(385)=1256:Table5of13(386)=775:Table5of13(387)=7192:Table5of13(388)=779:Table5of13(389)=6680 |
|
|
|
|
|
Table5of13(390)=781:Table5of13(391)=5656:Table5of13(392)=782:Table5of13(393)=3608:Table5of13(394)=787 |
|
|
|
|
|
Table5of13(395)=6424:Table5of13(396)=789:Table5of13(397)=5400:Table5of13(398)=790:Table5of13(399)=3352 |
|
|
|
|
|
Table5of13(400)=793:Table5of13(401)=4888:Table5of13(402)=794:Table5of13(403)=2840:Table5of13(404)=796 |
|
|
|
|
|
Table5of13(405)=1816:Table5of13(406)=803:Table5of13(407)=6296:Table5of13(408)=805:Table5of13(409)=5272 |
|
|
|
|
|
Table5of13(410)=806:Table5of13(411)=3224:Table5of13(412)=809:Table5of13(413)=4760:Table5of13(414)=810 |
|
|
|
|
|
Table5of13(415)=2712:Table5of13(416)=812:Table5of13(417)=1688:Table5of13(418)=817:Table5of13(419)=4504 |
|
|
|
|
|
Table5of13(420)=818:Table5of13(421)=2456:Table5of13(422)=820:Table5of13(423)=1432:Table5of13(424)=824 |
|
|
|
|
|
Table5of13(425)=920:Table5of13(426)=835:Table5of13(427)=6232:Table5of13(428)=837:Table5of13(429)=5208 |
|
|
|
|
|
Table5of13(430)=838:Table5of13(431)=3160:Table5of13(432)=841:Table5of13(433)=4696:Table5of13(434)=842 |
|
|
|
|
|
Table5of13(435)=2648:Table5of13(436)=844:Table5of13(437)=1624:Table5of13(438)=849:Table5of13(439)=4440 |
|
|
|
|
|
Table5of13(440)=850:Table5of13(441)=2392:Table5of13(442)=852:Table5of13(443)=1368:Table5of13(444)=865 |
|
|
|
|
|
Table5of13(445)=4312:Table5of13(446)=866:Table5of13(447)=2264:Table5of13(448)=868:Table5of13(449)=1240 |
|
|
|
|
|
Table5of13(450)=899:Table5of13(451)=6200:Table5of13(452)=901:Table5of13(453)=5176:Table5of13(454)=902 |
|
|
|
|
|
Table5of13(455)=3128:Table5of13(456)=905:Table5of13(457)=4664:Table5of13(458)=906:Table5of13(459)=2616 |
|
|
|
|
|
Table5of13(460)=908:Table5of13(461)=1592:Table5of13(462)=913:Table5of13(463)=4408:Table5of13(464)=914 |
|
|
|
|
|
Table5of13(465)=2360:Table5of13(466)=916:Table5of13(467)=1336:Table5of13(468)=929:Table5of13(469)=4280 |
|
|
|
|
|
Table5of13(470)=930:Table5of13(471)=2232:Table5of13(472)=932:Table5of13(473)=1208:Table5of13(474)=961 |
|
|
|
|
|
Table5of13(475)=4216:Table5of13(476)=962:Table5of13(477)=2168:Table5of13(478)=964:Table5of13(479)=1144 |
|
|
|
|
|
Table5of13(480)=1039:Table5of13(481)=7684:Table5of13(482)=1047:Table5of13(483)=7428:Table5of13(484)=1051 |
|
|
|
|
|
Table5of13(485)=6916:Table5of13(486)=1053:Table5of13(487)=5892:Table5of13(488)=1054:Table5of13(489)=3844 |
|
|
|
|
|
Table5of13(490)=1063:Table5of13(491)=7300:Table5of13(492)=1067:Table5of13(493)=6788:Table5of13(494)=1069 |
|
|
|
|
|
Table5of13(495)=5764:Table5of13(496)=1070:Table5of13(497)=3716:Table5of13(498)=1075:Table5of13(499)=6532 |
|
|
|
|
|
Table5of13(500)=1077:Table5of13(501)=5508:Table5of13(502)=1078:Table5of13(503)=3460:Table5of13(504)=1081 |
|
|
|
|
|
Table5of13(505)=4996:Table5of13(506)=1082:Table5of13(507)=2948:Table5of13(508)=1084:Table5of13(509)=1924 |
|
|
|
|
|
Table5of13(510)=1095:Table5of13(511)=7236:Table5of13(512)=1099:Table5of13(513)=6724:Table5of13(514)=1101 |
|
|
|
|
|
Table5of13(515)=5700:Table5of13(516)=1102:Table5of13(517)=3652:Table5of13(518)=1107:Table5of13(519)=6468 |
|
|
|
|
|
Table5of13(520)=1109:Table5of13(521)=5444:Table5of13(522)=1110:Table5of13(523)=3396:Table5of13(524)=1113 |
|
|
|
|
|
Table5of13(525)=4932:Table5of13(526)=1114:Table5of13(527)=2884:Table5of13(528)=1116:Table5of13(529)=1860 |
|
|
|
|
|
Table5of13(530)=1123:Table5of13(531)=6340:Table5of13(532)=1125:Table5of13(533)=5316:Table5of13(534)=1126 |
|
|
|
|
|
Table5of13(535)=3268:Table5of13(536)=1129:Table5of13(537)=4804:Table5of13(538)=1130:Table5of13(539)=2756 |
|
|
|
|
|
Table5of13(540)=1132:Table5of13(541)=1732:Table5of13(542)=1137:Table5of13(543)=4548:Table5of13(544)=1138 |
|
|
|
|
|
Table5of13(545)=2500:Table5of13(546)=1140:Table5of13(547)=1476:Table5of13(548)=1159:Table5of13(549)=7204 |
|
|
|
|
|
Table5of13(550)=1163:Table5of13(551)=6692:Table5of13(552)=1165:Table5of13(553)=5668:Table5of13(554)=1166 |
|
|
|
|
|
Table5of13(555)=3620:Table5of13(556)=1171:Table5of13(557)=6436:Table5of13(558)=1173:Table5of13(559)=5412 |
|
|
|
|
|
Table5of13(560)=1174:Table5of13(561)=3364:Table5of13(562)=1177:Table5of13(563)=4900:Table5of13(564)=1178 |
|
|
|
|
|
Table5of13(565)=2852:Table5of13(566)=1180:Table5of13(567)=1828:Table5of13(568)=1187:Table5of13(569)=6308 |
|
|
|
|
|
Table5of13(570)=1189:Table5of13(571)=5284:Table5of13(572)=1190:Table5of13(573)=3236:Table5of13(574)=1193 |
|
|
|
|
|
Table5of13(575)=4772:Table5of13(576)=1194:Table5of13(577)=2724:Table5of13(578)=1196:Table5of13(579)=1700 |
|
|
|
|
|
Table5of13(580)=1201:Table5of13(581)=4516:Table5of13(582)=1202:Table5of13(583)=2468:Table5of13(584)=1204 |
|
|
|
|
|
Table5of13(585)=1444:Table5of13(586)=1219:Table5of13(587)=6244:Table5of13(588)=1221:Table5of13(589)=5220 |
|
|
|
|
|
Table5of13(590)=1222:Table5of13(591)=3172:Table5of13(592)=1225:Table5of13(593)=4708:Table5of13(594)=1226 |
|
|
|
|
|
Table5of13(595)=2660:Table5of13(596)=1228:Table5of13(597)=1636:Table5of13(598)=1233:Table5of13(599)=4452 |
|
|
|
|
|
Table5of13(600)=1234:Table5of13(601)=2404:Table5of13(602)=1236:Table5of13(603)=1380:Table5of13(604)=1249 |
|
|
|
|
|
Table5of13(605)=4324:Table5of13(606)=1250:Table5of13(607)=2276:Table5of13(608)=1287:Table5of13(609)=7188 |
|
|
|
|
|
Table5of13(610)=1291:Table5of13(611)=6676:Table5of13(612)=1293:Table5of13(613)=5652:Table5of13(614)=1294 |
|
|
|
|
|
Table5of13(615)=3604:Table5of13(616)=1299:Table5of13(617)=6420:Table5of13(618)=1301:Table5of13(619)=5396 |
|
|
|
|
|
Table5of13(620)=1302:Table5of13(621)=3348:Table5of13(622)=1305:Table5of13(623)=4884:Table5of13(624)=1306 |
|
|
|
|
|
Table5of13(625)=2836:Table5of13(626)=1308:Table5of13(627)=1812:Table5of13(628)=1315:Table5of13(629)=6292 |
|
|
|
|
|
Table5of13(630)=1317:Table5of13(631)=5268:Table5of13(632)=1318:Table5of13(633)=3220:Table5of13(634)=1321 |
|
|
|
|
|
Table5of13(635)=4756:Table5of13(636)=1322:Table5of13(637)=2708:Table5of13(638)=1324:Table5of13(639)=1684 |
|
|
|
|
|
Table5of13(640)=1329:Table5of13(641)=4500:Table5of13(642)=1330:Table5of13(643)=2452:Table5of13(644)=1332 |
|
|
|
|
|
Table5of13(645)=1428:Table5of13(646)=1347:Table5of13(647)=6228:Table5of13(648)=1349:Table5of13(649)=5204 |
|
|
|
|
|
Table5of13(650)=1350:Table5of13(651)=3156:Table5of13(652)=1353:Table5of13(653)=4692:Table5of13(654)=1354 |
|
|
|
|
|
Table5of13(655)=2644:Table5of13(656)=1356:Table5of13(657)=1620:Table5of13(658)=1361:Table5of13(659)=4436 |
|
|
|
|
|
Table5of13(660)=1362:Table5of13(661)=2388:Table5of13(662)=1377:Table5of13(663)=4308:Table5of13(664)=1378 |
|
|
|
|
|
Table5of13(665)=2260:Table5of13(666)=1411:Table5of13(667)=6196:Table5of13(668)=1413:Table5of13(669)=5172 |
|
|
|
|
|
Table5of13(670)=1414:Table5of13(671)=3124:Table5of13(672)=1417:Table5of13(673)=4660:Table5of13(674)=1418 |
|
|
|
|
|
Table5of13(675)=2612:Table5of13(676)=1420:Table5of13(677)=1588:Table5of13(678)=1425:Table5of13(679)=4404 |
|
|
|
|
|
Table5of13(680)=1426:Table5of13(681)=2356:Table5of13(682)=1441:Table5of13(683)=4276:Table5of13(684)=1442 |
|
|
|
|
|
Table5of13(685)=2228:Table5of13(686)=1473:Table5of13(687)=4212:Table5of13(688)=1474:Table5of13(689)=2164 |
|
|
|
|
|
Table5of13(690)=1543:Table5of13(691)=7180:Table5of13(692)=1547:Table5of13(693)=6668:Table5of13(694)=1549 |
|
|
|
|
|
Table5of13(695)=5644:Table5of13(696)=1550:Table5of13(697)=3596:Table5of13(698)=1555:Table5of13(699)=6412 |
|
|
|
|
|
Table5of13(700)=1557:Table5of13(701)=5388:Table5of13(702)=1558:Table5of13(703)=3340:Table5of13(704)=1561 |
|
|
|
|
|
Table5of13(705)=4876:Table5of13(706)=1562:Table5of13(707)=2828:Table5of13(708)=1564:Table5of13(709)=1804 |
|
|
|
|
|
Table5of13(710)=1571:Table5of13(711)=6284:Table5of13(712)=1573:Table5of13(713)=5260:Table5of13(714)=1574 |
|
|
|
|
|
Table5of13(715)=3212:Table5of13(716)=1577:Table5of13(717)=4748:Table5of13(718)=1578:Table5of13(719)=2700 |
|
|
|
|
|
Table5of13(720)=1580:Table5of13(721)=1676:Table5of13(722)=1585:Table5of13(723)=4492:Table5of13(724)=1586 |
|
|
|
|
|
Table5of13(725)=2444:Table5of13(726)=1603:Table5of13(727)=6220:Table5of13(728)=1605:Table5of13(729)=5196 |
|
|
|
|
|
Table5of13(730)=1606:Table5of13(731)=3148:Table5of13(732)=1609:Table5of13(733)=4684:Table5of13(734)=1610 |
|
|
|
|
|
Table5of13(735)=2636:Table5of13(736)=1617:Table5of13(737)=4428:Table5of13(738)=1618:Table5of13(739)=2380 |
|
|
|
|
|
Table5of13(740)=1633:Table5of13(741)=4300:Table5of13(742)=1634:Table5of13(743)=2252:Table5of13(744)=1667 |
|
|
|
|
|
Table5of13(745)=6188:Table5of13(746)=1669:Table5of13(747)=5164:Table5of13(748)=1670:Table5of13(749)=3116 |
|
|
|
|
|
Table5of13(750)=1673:Table5of13(751)=4652:Table5of13(752)=1674:Table5of13(753)=2604:Table5of13(754)=1681 |
|
|
|
|
|
Table5of13(755)=4396:Table5of13(756)=1682:Table5of13(757)=2348:Table5of13(758)=1697:Table5of13(759)=4268 |
|
|
|
|
|
Table5of13(760)=1698:Table5of13(761)=2220:Table5of13(762)=1729:Table5of13(763)=4204:Table5of13(764)=1730 |
|
|
|
|
|
Table5of13(765)=2156:Table5of13(766)=1795:Table5of13(767)=6172:Table5of13(768)=1797:Table5of13(769)=5148 |
|
|
|
|
|
Table5of13(770)=1798:Table5of13(771)=3100:Table5of13(772)=1801:Table5of13(773)=4636:Table5of13(774)=1802 |
|
|
|
|
|
Table5of13(775)=2588:Table5of13(776)=1809:Table5of13(777)=4380:Table5of13(778)=1810:Table5of13(779)=2332 |
|
|
|
|
|
Table5of13(780)=1825:Table5of13(781)=4252:Table5of13(782)=1826:Table5of13(783)=2204:Table5of13(784)=1857 |
|
|
|
|
|
Table5of13(785)=4188:Table5of13(786)=1858:Table5of13(787)=2140:Table5of13(788)=1921:Table5of13(789)=4156 |
|
|
|
|
|
Table5of13(790)=1922:Table5of13(791)=2108:Table5of13(792)=2063:Table5of13(793)=7682:Table5of13(794)=2071 |
|
|
|
|
|
Table5of13(795)=7426:Table5of13(796)=2075:Table5of13(797)=6914:Table5of13(798)=2077:Table5of13(799)=5890 |
|
|
|
|
|
Table5of13(800)=2078:Table5of13(801)=3842:Table5of13(802)=2087:Table5of13(803)=7298:Table5of13(804)=2091 |
|
|
|
|
|
Table5of13(805)=6786:Table5of13(806)=2093:Table5of13(807)=5762:Table5of13(808)=2094:Table5of13(809)=3714 |
|
|
|
|
|
Table5of13(810)=2099:Table5of13(811)=6530:Table5of13(812)=2101:Table5of13(813)=5506:Table5of13(814)=2102 |
|
|
|
|
|
Table5of13(815)=3458:Table5of13(816)=2105:Table5of13(817)=4994:Table5of13(818)=2106:Table5of13(819)=2946 |
|
|
|
|
|
Table5of13(820)=2119:Table5of13(821)=7234:Table5of13(822)=2123:Table5of13(823)=6722:Table5of13(824)=2125 |
|
|
|
|
|
Table5of13(825)=5698:Table5of13(826)=2126:Table5of13(827)=3650:Table5of13(828)=2131:Table5of13(829)=6466 |
|
|
|
|
|
Table5of13(830)=2133:Table5of13(831)=5442:Table5of13(832)=2134:Table5of13(833)=3394:Table5of13(834)=2137 |
|
|
|
|
|
Table5of13(835)=4930:Table5of13(836)=2138:Table5of13(837)=2882:Table5of13(838)=2147:Table5of13(839)=6338 |
|
|
|
|
|
Table5of13(840)=2149:Table5of13(841)=5314:Table5of13(842)=2150:Table5of13(843)=3266:Table5of13(844)=2153 |
|
|
|
|
|
Table5of13(845)=4802:Table5of13(846)=2154:Table5of13(847)=2754:Table5of13(848)=2161:Table5of13(849)=4546 |
|
|
|
|
|
Table5of13(850)=2162:Table5of13(851)=2498:Table5of13(852)=2183:Table5of13(853)=7202:Table5of13(854)=2187 |
|
|
|
|
|
Table5of13(855)=6690:Table5of13(856)=2189:Table5of13(857)=5666:Table5of13(858)=2190:Table5of13(859)=3618 |
|
|
|
|
|
Table5of13(860)=2195:Table5of13(861)=6434:Table5of13(862)=2197:Table5of13(863)=5410:Table5of13(864)=2198 |
|
|
|
|
|
Table5of13(865)=3362:Table5of13(866)=2201:Table5of13(867)=4898:Table5of13(868)=2202:Table5of13(869)=2850 |
|
|
|
|
|
Table5of13(870)=2211:Table5of13(871)=6306:Table5of13(872)=2213:Table5of13(873)=5282:Table5of13(874)=2214 |
|
|
|
|
|
Table5of13(875)=3234:Table5of13(876)=2217:Table5of13(877)=4770:Table5of13(878)=2218:Table5of13(879)=2722 |
|
|
|
|
|
Table5of13(880)=2225:Table5of13(881)=4514:Table5of13(882)=2226:Table5of13(883)=2466:Table5of13(884)=2243 |
|
|
|
|
|
Table5of13(885)=6242:Table5of13(886)=2245:Table5of13(887)=5218:Table5of13(888)=2246:Table5of13(889)=3170 |
|
|
|
|
|
Table5of13(890)=2249:Table5of13(891)=4706:Table5of13(892)=2250:Table5of13(893)=2658:Table5of13(894)=2257 |
|
|
|
|
|
Table5of13(895)=4450:Table5of13(896)=2258:Table5of13(897)=2402:Table5of13(898)=2273:Table5of13(899)=4322 |
|
|
|
|
|
Table5of13(900)=2311:Table5of13(901)=7186:Table5of13(902)=2315:Table5of13(903)=6674:Table5of13(904)=2317 |
|
|
|
|
|
Table5of13(905)=5650:Table5of13(906)=2318:Table5of13(907)=3602:Table5of13(908)=2323:Table5of13(909)=6418 |
|
|
|
|
|
Table5of13(910)=2325:Table5of13(911)=5394:Table5of13(912)=2326:Table5of13(913)=3346:Table5of13(914)=2329 |
|
|
|
|
|
Table5of13(915)=4882:Table5of13(916)=2330:Table5of13(917)=2834:Table5of13(918)=2339:Table5of13(919)=6290 |
|
|
|
|
|
Table5of13(920)=2341:Table5of13(921)=5266:Table5of13(922)=2342:Table5of13(923)=3218:Table5of13(924)=2345 |
|
|
|
|
|
Table5of13(925)=4754:Table5of13(926)=2346:Table5of13(927)=2706:Table5of13(928)=2353:Table5of13(929)=4498 |
|
|
|
|
|
Table5of13(930)=2354:Table5of13(931)=2450:Table5of13(932)=2371:Table5of13(933)=6226:Table5of13(934)=2373 |
|
|
|
|
|
Table5of13(935)=5202:Table5of13(936)=2374:Table5of13(937)=3154:Table5of13(938)=2377:Table5of13(939)=4690 |
|
|
|
|
|
Table5of13(940)=2378:Table5of13(941)=2642:Table5of13(942)=2385:Table5of13(943)=4434:Table5of13(944)=2401 |
|
|
|
|
|
Table5of13(945)=4306:Table5of13(946)=2435:Table5of13(947)=6194:Table5of13(948)=2437:Table5of13(949)=5170 |
|
|
|
|
|
Table5of13(950)=2438:Table5of13(951)=3122:Table5of13(952)=2441:Table5of13(953)=4658:Table5of13(954)=2442 |
|
|
|
|
|
Table5of13(955)=2610:Table5of13(956)=2449:Table5of13(957)=4402:Table5of13(958)=2465:Table5of13(959)=4274 |
|
|
|
|
|
Table5of13(960)=2497:Table5of13(961)=4210:Table5of13(962)=2567:Table5of13(963)=7178:Table5of13(964)=2571 |
|
|
|
|
|
Table5of13(965)=6666:Table5of13(966)=2573:Table5of13(967)=5642:Table5of13(968)=2574:Table5of13(969)=3594 |
|
|
|
|
|
Table5of13(970)=2579:Table5of13(971)=6410:Table5of13(972)=2581:Table5of13(973)=5386:Table5of13(974)=2582 |
|
|
|
|
|
Table5of13(975)=3338:Table5of13(976)=2585:Table5of13(977)=4874:Table5of13(978)=2586:Table5of13(979)=2826 |
|
|
|
|
|
Table5of13(980)=2595:Table5of13(981)=6282:Table5of13(982)=2597:Table5of13(983)=5258:Table5of13(984)=2598 |
|
|
|
|
|
Table5of13(985)=3210:Table5of13(986)=2601:Table5of13(987)=4746:Table5of13(988)=2602:Table5of13(989)=2698 |
|
|
|
|
|
Table5of13(990)=2609:Table5of13(991)=4490:Table5of13(992)=2627:Table5of13(993)=6218:Table5of13(994)=2629 |
|
|
|
|
|
Table5of13(995)=5194:Table5of13(996)=2630:Table5of13(997)=3146:Table5of13(998)=2633:Table5of13(999)=4682 |
|
|
|
|
|
Table5of13(1000)=2641:Table5of13(1001)=4426:Table5of13(1002)=2657:Table5of13(1003)=4298:Table5of13(1004)=2691 |
|
|
|
|
|
Table5of13(1005)=6186:Table5of13(1006)=2693:Table5of13(1007)=5162:Table5of13(1008)=2694:Table5of13(1009)=3114 |
|
|
|
|
|
Table5of13(1010)=2697:Table5of13(1011)=4650:Table5of13(1012)=2705:Table5of13(1013)=4394:Table5of13(1014)=2721 |
|
|
|
|
|
Table5of13(1015)=4266:Table5of13(1016)=2753:Table5of13(1017)=4202:Table5of13(1018)=2819:Table5of13(1019)=6170 |
|
|
|
|
|
Table5of13(1020)=2821:Table5of13(1021)=5146:Table5of13(1022)=2822:Table5of13(1023)=3098:Table5of13(1024)=2825 |
|
|
|
|
|
Table5of13(1025)=4634:Table5of13(1026)=2833:Table5of13(1027)=4378:Table5of13(1028)=2849:Table5of13(1029)=4250 |
|
|
|
|
|
Table5of13(1030)=2881:Table5of13(1031)=4186:Table5of13(1032)=2945:Table5of13(1033)=4154:Table5of13(1034)=3079 |
|
|
|
|
|
Table5of13(1035)=7174:Table5of13(1036)=3083:Table5of13(1037)=6662:Table5of13(1038)=3085:Table5of13(1039)=5638 |
|
|
|
|
|
Table5of13(1040)=3086:Table5of13(1041)=3590:Table5of13(1042)=3091:Table5of13(1043)=6406:Table5of13(1044)=3093 |
|
|
|
|
|
Table5of13(1045)=5382:Table5of13(1046)=3094:Table5of13(1047)=3334:Table5of13(1048)=3097:Table5of13(1049)=4870 |
|
|
|
|
|
Table5of13(1050)=3107:Table5of13(1051)=6278:Table5of13(1052)=3109:Table5of13(1053)=5254:Table5of13(1054)=3110 |
|
|
|
|
|
Table5of13(1055)=3206:Table5of13(1056)=3113:Table5of13(1057)=4742:Table5of13(1058)=3121:Table5of13(1059)=4486 |
|
|
|
|
|
Table5of13(1060)=3139:Table5of13(1061)=6214:Table5of13(1062)=3141:Table5of13(1063)=5190:Table5of13(1064)=3145 |
|
|
|
|
|
Table5of13(1065)=4678:Table5of13(1066)=3153:Table5of13(1067)=4422:Table5of13(1068)=3169:Table5of13(1069)=4294 |
|
|
|
|
|
Table5of13(1070)=3203:Table5of13(1071)=6182:Table5of13(1072)=3205:Table5of13(1073)=5158:Table5of13(1074)=3209 |
|
|
|
|
|
Table5of13(1075)=4646:Table5of13(1076)=3217:Table5of13(1077)=4390:Table5of13(1078)=3233:Table5of13(1079)=4262 |
|
|
|
|
|
Table5of13(1080)=3265:Table5of13(1081)=4198:Table5of13(1082)=3331:Table5of13(1083)=6166:Table5of13(1084)=3333 |
|
|
|
|
|
Table5of13(1085)=5142:Table5of13(1086)=3337:Table5of13(1087)=4630:Table5of13(1088)=3345:Table5of13(1089)=4374 |
|
|
|
|
|
Table5of13(1090)=3361:Table5of13(1091)=4246:Table5of13(1092)=3393:Table5of13(1093)=4182:Table5of13(1094)=3457 |
|
|
|
|
|
Table5of13(1095)=4150:Table5of13(1096)=3587:Table5of13(1097)=6158:Table5of13(1098)=3589:Table5of13(1099)=5134 |
|
|
|
|
|
Table5of13(1100)=3593:Table5of13(1101)=4622:Table5of13(1102)=3601:Table5of13(1103)=4366:Table5of13(1104)=3617 |
|
|
|
|
|
Table5of13(1105)=4238:Table5of13(1106)=3649:Table5of13(1107)=4174:Table5of13(1108)=3713:Table5of13(1109)=4142 |
|
|
|
|
|
Table5of13(1110)=3841:Table5of13(1111)=4126:Table5of13(1112)=4111:Table5of13(1113)=7681:Table5of13(1114)=4119 |
|
|
|
|
|
Table5of13(1115)=7425:Table5of13(1116)=4123:Table5of13(1117)=6913:Table5of13(1118)=4125:Table5of13(1119)=5889 |
|
|
|
|
|
Table5of13(1120)=4135:Table5of13(1121)=7297:Table5of13(1122)=4139:Table5of13(1123)=6785:Table5of13(1124)=4141 |
|
|
|
|
|
Table5of13(1125)=5761:Table5of13(1126)=4147:Table5of13(1127)=6529:Table5of13(1128)=4149:Table5of13(1129)=5505 |
|
|
|
|
|
Table5of13(1130)=4153:Table5of13(1131)=4993:Table5of13(1132)=4167:Table5of13(1133)=7233:Table5of13(1134)=4171 |
|
|
|
|
|
Table5of13(1135)=6721:Table5of13(1136)=4173:Table5of13(1137)=5697:Table5of13(1138)=4179:Table5of13(1139)=6465 |
|
|
|
|
|
Table5of13(1140)=4181:Table5of13(1141)=5441:Table5of13(1142)=4185:Table5of13(1143)=4929:Table5of13(1144)=4195 |
|
|
|
|
|
Table5of13(1145)=6337:Table5of13(1146)=4197:Table5of13(1147)=5313:Table5of13(1148)=4201:Table5of13(1149)=4801 |
|
|
|
|
|
Table5of13(1150)=4209:Table5of13(1151)=4545:Table5of13(1152)=4231:Table5of13(1153)=7201:Table5of13(1154)=4235 |
|
|
|
|
|
Table5of13(1155)=6689:Table5of13(1156)=4237:Table5of13(1157)=5665:Table5of13(1158)=4243:Table5of13(1159)=6433 |
|
|
|
|
|
Table5of13(1160)=4245:Table5of13(1161)=5409:Table5of13(1162)=4249:Table5of13(1163)=4897:Table5of13(1164)=4259 |
|
|
|
|
|
Table5of13(1165)=6305:Table5of13(1166)=4261:Table5of13(1167)=5281:Table5of13(1168)=4265:Table5of13(1169)=4769 |
|
|
|
|
|
Table5of13(1170)=4273:Table5of13(1171)=4513:Table5of13(1172)=4291:Table5of13(1173)=6241:Table5of13(1174)=4293 |
|
|
|
|
|
Table5of13(1175)=5217:Table5of13(1176)=4297:Table5of13(1177)=4705:Table5of13(1178)=4305:Table5of13(1179)=4449 |
|
|
|
|
|
Table5of13(1180)=4359:Table5of13(1181)=7185:Table5of13(1182)=4363:Table5of13(1183)=6673:Table5of13(1184)=4365 |
|
|
|
|
|
Table5of13(1185)=5649:Table5of13(1186)=4371:Table5of13(1187)=6417:Table5of13(1188)=4373:Table5of13(1189)=5393 |
|
|
|
|
|
Table5of13(1190)=4377:Table5of13(1191)=4881:Table5of13(1192)=4387:Table5of13(1193)=6289:Table5of13(1194)=4389 |
|
|
|
|
|
Table5of13(1195)=5265:Table5of13(1196)=4393:Table5of13(1197)=4753:Table5of13(1198)=4401:Table5of13(1199)=4497 |
|
|
|
|
|
Table5of13(1200)=4419:Table5of13(1201)=6225:Table5of13(1202)=4421:Table5of13(1203)=5201:Table5of13(1204)=4425 |
|
|
|
|
|
Table5of13(1205)=4689:Table5of13(1206)=4483:Table5of13(1207)=6193:Table5of13(1208)=4485:Table5of13(1209)=5169 |
|
|
|
|
|
Table5of13(1210)=4489:Table5of13(1211)=4657:Table5of13(1212)=4615:Table5of13(1213)=7177:Table5of13(1214)=4619 |
|
|
|
|
|
Table5of13(1215)=6665:Table5of13(1216)=4621:Table5of13(1217)=5641:Table5of13(1218)=4627:Table5of13(1219)=6409 |
|
|
|
|
|
Table5of13(1220)=4629:Table5of13(1221)=5385:Table5of13(1222)=4633:Table5of13(1223)=4873:Table5of13(1224)=4643 |
|
|
|
|
|
Table5of13(1225)=6281:Table5of13(1226)=4645:Table5of13(1227)=5257:Table5of13(1228)=4649:Table5of13(1229)=4745 |
|
|
|
|
|
Table5of13(1230)=4675:Table5of13(1231)=6217:Table5of13(1232)=4677:Table5of13(1233)=5193:Table5of13(1234)=4739 |
|
|
|
|
|
Table5of13(1235)=6185:Table5of13(1236)=4741:Table5of13(1237)=5161:Table5of13(1238)=4867:Table5of13(1239)=6169 |
|
|
|
|
|
Table5of13(1240)=4869:Table5of13(1241)=5145:Table5of13(1242)=5127:Table5of13(1243)=7173:Table5of13(1244)=5131 |
|
|
|
|
|
Table5of13(1245)=6661:Table5of13(1246)=5133:Table5of13(1247)=5637:Table5of13(1248)=5139:Table5of13(1249)=6405 |
|
|
|
|
|
Table5of13(1250)=5141:Table5of13(1251)=5381:Table5of13(1252)=5155:Table5of13(1253)=6277:Table5of13(1254)=5157 |
|
|
|
|
|
Table5of13(1255)=5253:Table5of13(1256)=5187:Table5of13(1257)=6213:Table5of13(1258)=5251:Table5of13(1259)=6181 |
|
|
|
|
|
Table5of13(1260)=5379:Table5of13(1261)=6165:Table5of13(1262)=5635:Table5of13(1263)=6157:Table5of13(1264)=6151 |
|
|
|
|
|
Table5of13(1265)=7171:Table5of13(1266)=6155:Table5of13(1267)=6659:Table5of13(1268)=6163:Table5of13(1269)=6403 |
|
|
|
|
|
Table5of13(1270)=6179:Table5of13(1271)=6275:Table5of13(1272)=6211:Table5of13(1273)=5189:Table5of13(1274)=4681 |
|
|
|
|
|
Table5of13(1275)=4433:Table5of13(1276)=4321:Table5of13(1277)=3142:Table5of13(1278)=2634:Table5of13(1279)=2386 |
|
|
|
|
|
Table5of13(1280)=2274:Table5of13(1281)=1612:Table5of13(1282)=1364:Table5of13(1283)=1252:Table5of13(1284)=856 |
|
|
|
|
|
Table5of13(1285)=744:Table5of13(1286)=496 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
' Table 20: 2 of 13 Characters (78 entries) |
|
|
|
|
|
Table2of13(0)=3:Table2of13(1)=6144:Table2of13(2)=5:Table2of13(3)=5120:Table2of13(4)=6 |
|
|
|
|
|
Table2of13(5)=3072:Table2of13(6)=9:Table2of13(7)=4608:Table2of13(8)=10:Table2of13(9)=2560 |
|
|
|
|
|
Table2of13(10)=12:Table2of13(11)=1536:Table2of13(12)=17:Table2of13(13)=4352:Table2of13(14)=18 |
|
|
|
|
|
Table2of13(15)=2304:Table2of13(16)=20:Table2of13(17)=1280:Table2of13(18)=24:Table2of13(19)=768 |
|
|
|
|
|
Table2of13(20)=33:Table2of13(21)=4224:Table2of13(22)=34:Table2of13(23)=2176:Table2of13(24)=36 |
|
|
|
|
|
Table2of13(25)=1152:Table2of13(26)=40:Table2of13(27)=640:Table2of13(28)=48:Table2of13(29)=384 |
|
|
|
|
|
Table2of13(30)=65:Table2of13(31)=4160:Table2of13(32)=66:Table2of13(33)=2112:Table2of13(34)=68 |
|
|
|
|
|
Table2of13(35)=1088:Table2of13(36)=72:Table2of13(37)=576:Table2of13(38)=80:Table2of13(39)=320 |
|
|
|
|
|
Table2of13(40)=96:Table2of13(41)=192:Table2of13(42)=129:Table2of13(43)=4128:Table2of13(44)=130 |
|
|
|
|
|
Table2of13(45)=2080:Table2of13(46)=132:Table2of13(47)=1056:Table2of13(48)=136:Table2of13(49)=544 |
|
|
|
|
|
Table2of13(50)=144:Table2of13(51)=288:Table2of13(52)=257:Table2of13(53)=4112:Table2of13(54)=258 |
|
|
|
|
|
Table2of13(55)=2064:Table2of13(56)=260:Table2of13(57)=1040:Table2of13(58)=264:Table2of13(59)=528 |
|
|
|
|
|
Table2of13(60)=513:Table2of13(61)=4104:Table2of13(62)=514:Table2of13(63)=2056:Table2of13(64)=516 |
|
|
|
|
|
Table2of13(65)=1032:Table2of13(66)=1025:Table2of13(67)=4100:Table2of13(68)=1026:Table2of13(69)=2052 |
|
|
|
|
|
Table2of13(70)=2049:Table2of13(71)=4098:Table2of13(72)=4097:Table2of13(73)=2050:Table2of13(74)=1028 |
|
|
|
|
|
Table2of13(75)=520:Table2of13(76)=272:Table2of13(77)=160 |
|
|
|
|
|
|
|
|
|
|
|
' Table 22: Bar to Character Mapping |
|
|
|
|
|
BarCharMap(0,0)=7:BarCharMap(0,1)=2:BarCharMap(0,2)=4:BarCharMap(0,3)=3 |
|
|
|
|
|
BarCharMap(1,0)=1:BarCharMap(1,1)=10:BarCharMap(1,2)=0:BarCharMap(1,3)=0 |
|
|
|
|
|
BarCharMap(2,0)=9:BarCharMap(2,1)=12:BarCharMap(2,2)=2:BarCharMap(2,3)=8 |
|
|
|
|
|
BarCharMap(3,0)=5:BarCharMap(3,1)=5:BarCharMap(3,2)=6:BarCharMap(3,3)=11 |
|
|
|
|
|
BarCharMap(4,0)=8:BarCharMap(4,1)=9:BarCharMap(4,2)=3:BarCharMap(4,3)=1 |
|
|
|
|
|
BarCharMap(5,0)=0:BarCharMap(5,1)=1:BarCharMap(5,2)=5:BarCharMap(5,3)=12 |
|
|
|
|
|
BarCharMap(6,0)=2:BarCharMap(6,1)=5:BarCharMap(6,2)=1:BarCharMap(6,3)=8 |
|
|
|
|
|
BarCharMap(7,0)=4:BarCharMap(7,1)=4:BarCharMap(7,2)=9:BarCharMap(7,3)=11 |
|
|
|
|
|
BarCharMap(8,0)=6:BarCharMap(8,1)=3:BarCharMap(8,2)=8:BarCharMap(8,3)=10 |
|
|
|
|
|
BarCharMap(9,0)=3:BarCharMap(9,1)=9:BarCharMap(9,2)=7:BarCharMap(9,3)=6 |
|
|
|
|
|
BarCharMap(10,0)=5:BarCharMap(10,1)=11:BarCharMap(10,2)=1:BarCharMap(10,3)=4 |
|
|
|
|
|
BarCharMap(11,0)=8:BarCharMap(11,1)=5:BarCharMap(11,2)=2:BarCharMap(11,3)=12 |
|
|
|
|
|
BarCharMap(12,0)=9:BarCharMap(12,1)=10:BarCharMap(12,2)=0:BarCharMap(12,3)=2 |
|
|
|
|
|
BarCharMap(13,0)=7:BarCharMap(13,1)=1:BarCharMap(13,2)=6:BarCharMap(13,3)=7 |
|
|
|
|
|
BarCharMap(14,0)=3:BarCharMap(14,1)=6:BarCharMap(14,2)=4:BarCharMap(14,3)=9 |
|
|
|
|
|
BarCharMap(15,0)=0:BarCharMap(15,1)=3:BarCharMap(15,2)=8:BarCharMap(15,3)=6 |
|
|
|
|
|
BarCharMap(16,0)=6:BarCharMap(16,1)=4:BarCharMap(16,2)=2:BarCharMap(16,3)=7 |
|
|
|
|
|
BarCharMap(17,0)=1:BarCharMap(17,1)=1:BarCharMap(17,2)=9:BarCharMap(17,3)=9 |
|
|
|
|
|
BarCharMap(18,0)=7:BarCharMap(18,1)=10:BarCharMap(18,2)=5:BarCharMap(18,3)=2 |
|
|
|
|
|
BarCharMap(19,0)=4:BarCharMap(19,1)=0:BarCharMap(19,2)=3:BarCharMap(19,3)=8 |
|
|
|
|
|
BarCharMap(20,0)=6:BarCharMap(20,1)=2:BarCharMap(20,2)=0:BarCharMap(20,3)=4 |
|
|
|
|
|
BarCharMap(21,0)=8:BarCharMap(21,1)=11:BarCharMap(21,2)=1:BarCharMap(21,3)=0 |
|
|
|
|
|
BarCharMap(22,0)=9:BarCharMap(22,1)=8:BarCharMap(22,2)=3:BarCharMap(22,3)=12 |
|
|
|
|
|
BarCharMap(23,0)=2:BarCharMap(23,1)=6:BarCharMap(23,2)=7:BarCharMap(23,3)=7 |
|
|
|
|
|
BarCharMap(24,0)=5:BarCharMap(24,1)=1:BarCharMap(24,2)=4:BarCharMap(24,3)=10 |
|
|
|
|
|
BarCharMap(25,0)=1:BarCharMap(25,1)=12:BarCharMap(25,2)=6:BarCharMap(25,3)=9 |
|
|
|
|
|
BarCharMap(26,0)=7:BarCharMap(26,1)=3:BarCharMap(26,2)=8:BarCharMap(26,3)=0 |
|
|
|
|
|
BarCharMap(27,0)=5:BarCharMap(27,1)=8:BarCharMap(27,2)=9:BarCharMap(27,3)=7 |
|
|
|
|
|
BarCharMap(28,0)=4:BarCharMap(28,1)=6:BarCharMap(28,2)=2:BarCharMap(28,3)=10 |
|
|
|
|
|
BarCharMap(29,0)=3:BarCharMap(29,1)=4:BarCharMap(29,2)=0:BarCharMap(29,3)=5 |
|
|
|
|
|
BarCharMap(30,0)=8:BarCharMap(30,1)=4:BarCharMap(30,2)=5:BarCharMap(30,3)=7 |
|
|
|
|
|
BarCharMap(31,0)=7:BarCharMap(31,1)=11:BarCharMap(31,2)=1:BarCharMap(31,3)=9 |
|
|
|
|
|
BarCharMap(32,0)=6:BarCharMap(32,1)=0:BarCharMap(32,2)=9:BarCharMap(32,3)=6 |
|
|
|
|
|
BarCharMap(33,0)=0:BarCharMap(33,1)=6:BarCharMap(33,2)=4:BarCharMap(33,3)=8 |
|
|
|
|
|
BarCharMap(34,0)=2:BarCharMap(34,1)=1:BarCharMap(34,2)=3:BarCharMap(34,3)=2 |
|
|
|
|
|
BarCharMap(35,0)=5:BarCharMap(35,1)=9:BarCharMap(35,2)=8:BarCharMap(35,3)=12 |
|
|
|
|
|
BarCharMap(36,0)=4:BarCharMap(36,1)=11:BarCharMap(36,2)=6:BarCharMap(36,3)=1 |
|
|
|
|
|
BarCharMap(37,0)=9:BarCharMap(37,1)=5:BarCharMap(37,2)=7:BarCharMap(37,3)=4 |
|
|
|
|
|
BarCharMap(38,0)=3:BarCharMap(38,1)=3:BarCharMap(38,2)=1:BarCharMap(38,3)=2 |
|
|
|
|
|
BarCharMap(39,0)=0:BarCharMap(39,1)=7:BarCharMap(39,2)=2:BarCharMap(39,3)=0 |
|
|
|
|
|
BarCharMap(40,0)=1:BarCharMap(40,1)=3:BarCharMap(40,2)=4:BarCharMap(40,3)=1 |
|
|
|
|
|
BarCharMap(41,0)=6:BarCharMap(41,1)=10:BarCharMap(41,2)=3:BarCharMap(41,3)=5 |
|
|
|
|
|
BarCharMap(42,0)=8:BarCharMap(42,1)=7:BarCharMap(42,2)=9:BarCharMap(42,3)=4 |
|
|
|
|
|
BarCharMap(43,0)=2:BarCharMap(43,1)=11:BarCharMap(43,2)=5:BarCharMap(43,3)=6 |
|
|
|
|
|
BarCharMap(44,0)=0:BarCharMap(44,1)=8:BarCharMap(44,2)=7:BarCharMap(44,3)=12 |
|
|
|
|
|
BarCharMap(45,0)=4:BarCharMap(45,1)=2:BarCharMap(45,2)=8:BarCharMap(45,3)=1 |
|
|
|
|
|
BarCharMap(46,0)=5:BarCharMap(46,1)=10:BarCharMap(46,2)=3:BarCharMap(46,3)=0 |
|
|
|
|
|
BarCharMap(47,0)=9:BarCharMap(47,1)=3:BarCharMap(47,2)=0:BarCharMap(47,3)=9 |
|
|
|
|
|
BarCharMap(48,0)=6:BarCharMap(48,1)=5:BarCharMap(48,2)=2:BarCharMap(48,3)=4 |
|
|
|
|
|
BarCharMap(49,0)=7:BarCharMap(49,1)=8:BarCharMap(49,2)=1:BarCharMap(49,3)=7 |
|
|
|
|
|
BarCharMap(50,0)=5:BarCharMap(50,1)=0:BarCharMap(50,2)=4:BarCharMap(50,3)=5 |
|
|
|
|
|
BarCharMap(51,0)=2:BarCharMap(51,1)=3:BarCharMap(51,2)=0:BarCharMap(51,3)=10 |
|
|
|
|
|
BarCharMap(52,0)=6:BarCharMap(52,1)=12:BarCharMap(52,2)=9:BarCharMap(52,3)=2 |
|
|
|
|
|
BarCharMap(53,0)=3:BarCharMap(53,1)=11:BarCharMap(53,2)=1:BarCharMap(53,3)=6 |
|
|
|
|
|
BarCharMap(54,0)=8:BarCharMap(54,1)=8:BarCharMap(54,2)=7:BarCharMap(54,3)=9 |
|
|
|
|
|
BarCharMap(55,0)=5:BarCharMap(55,1)=4:BarCharMap(55,2)=0:BarCharMap(55,3)=11 |
|
|
|
|
|
BarCharMap(56,0)=1:BarCharMap(56,1)=5:BarCharMap(56,2)=2:BarCharMap(56,3)=2 |
|
|
|
|
|
BarCharMap(57,0)=9:BarCharMap(57,1)=1:BarCharMap(57,2)=4:BarCharMap(57,3)=12 |
|
|
|
|
|
BarCharMap(58,0)=8:BarCharMap(58,1)=3:BarCharMap(58,2)=6:BarCharMap(58,3)=6 |
|
|
|
|
|
BarCharMap(59,0)=7:BarCharMap(59,1)=0:BarCharMap(59,2)=3:BarCharMap(59,3)=7 |
|
|
|
|
|
BarCharMap(60,0)=4:BarCharMap(60,1)=7:BarCharMap(60,2)=7:BarCharMap(60,3)=5 |
|
|
|
|
|
BarCharMap(61,0)=0:BarCharMap(61,1)=12:BarCharMap(61,2)=1:BarCharMap(61,3)=11 |
|
|
|
|
|
BarCharMap(62,0)=2:BarCharMap(62,1)=9:BarCharMap(62,2)=9:BarCharMap(62,3)=0 |
|
|
|
|
|
BarCharMap(63,0)=6:BarCharMap(63,1)=8:BarCharMap(63,2)=5:BarCharMap(63,3)=3 |
|
|
|
|
|
BarCharMap(64,0)=3:BarCharMap(64,1)=10:BarCharMap(64,2)=8:BarCharMap(64,3)=2 |
|
|
|
|
|
|
|
|
|
|
|
' Build reverse lookup |
|
|
|
|
|
CharToCodeword.RemoveAll |
|
|
|
|
|
For i = 0 To 1286 |
|
|
|
|
|
CharToCodeword(CStr(Table5of13(i) And &H1FFF)) = CLng(i) |
|
|
|
|
|
Next |
|
|
|
|
|
For i = 0 To 77 |
|
|
|
|
|
CharToCodeword(CStr(Table2of13(i) And &H1FFF)) = CLng(1287 + i) |
|
|
|
|
|
Next |
|
|
|
|
|
|
|
|
|
|
|
IsInitialized = True |
|
|
|
|
|
End Sub |
|
|
|
|
|
End Class |
|
|
|
|
|
|
|
|
|
|
|
'============================================================================== |
|
|
|
|
|
' Singleton Instance Function |
|
|
|
|
|
'============================================================================== |
|
|
|
|
|
Dim g_IMBCodecInstance |
|
|
|
|
|
|
|
|
|
|
|
Function GetIMBCodec() |
|
|
|
|
|
If IsEmpty(g_IMBCodecInstance) Or IsNull(g_IMBCodecInstance) Then |
|
|
|
|
|
Set g_IMBCodecInstance = New IMBCodec |
|
|
|
|
|
End If |
|
|
|
|
|
Set GetIMBCodec = g_IMBCodecInstance |
|
|
|
|
|
End Function |
|
|
|
|
|
|
|
|
|
|
|
%> |