MOD-37 Barcode Specification Source Code

Barcode Information | Tutorials | Examples

The MOD-37 barcode function is used in some IDAutomation Barcode Products to create an ISBT-128 compatible check character K according to the ISO 7064 MOD 37-2 Algorithm. IDAutomation also provides MOD-37 VB source code for this calculation and a Crystal Reports Barcode Tutorial.

The VBA source code below for the function may also be easily translated into other programming languages as necessary.

Public Function ISO_MOD37_2(DataString As String, Optional ReturnType As Integer = 0) As String
    DataString = UCase(DataString)
    Dim CorrectData As String
    Dim WeightedSum As Long
    Dim StringLength As Long
    Dim AscValue As Long
    Dim CharValue As Long
    Dim CheckDigitAscVal As Long
    Dim CheckDigitAsc As Long
    Dim StringLen As Long
    Dim I As Long
    StringLen = Len(DataString)
    For I = 1 To StringLen
        AscValue = AscW(Mid(DataString, I, 1))
        If AscValue < 58 And AscValue > 47 Then CorrectData = CorrectData & Mid(DataString, I, 1) '0-9
        If AscValue < 91 And AscValue > 64 Then CorrectData = CorrectData & Mid(DataString, I, 1) 'A-Z
    Next I
    DataString = CorrectData
    CorrectData = ""
    WeightedSum = 0
    StringLength = Len(DataString)
    For I = 1 To StringLength
        AscValue = AscW(Mid(DataString, I, 1))
        If AscValue < 58 And AscValue > 47 Then CharValue = AscValue - 48 '0-9 = values 0-9
        If AscValue < 91 And AscValue > 64 Then CharValue = AscValue - 55 'A-Z = values 10-35
        WeightedSum = ((WeightedSum + CharValue) * 2) Mod 37
    Next I
    CheckDigitAscVal = (38 - WeightedSum) Mod 37
    If CheckDigitAscVal < 10 Then CheckDigitAsc = CheckDigitAscVal + 48 '0-9
    If CheckDigitAscVal < 36 And CheckDigitAscVal > 9 Then CheckDigitAsc = CheckDigitAscVal + 55 'A-Z
    If CheckDigitAscVal = 36 Then CheckDigitAsc = 42 '*
    If ReturnType = 1 Then ISO_MOD37_2 = " [" & ChrW(CheckDigitAsc) & "]"
    If ReturnType = 0 Then ISO_MOD37_2 = ChrW(CheckDigitAsc)
End Function