ActiveReportsのカスタムバーコードの利用

果樹配送伝票印刷ソフト「ももっちい」のカスタマバーコード対応をしました。

カスタマバーコードとは?

カスタマバーコードを記載することで、郵便物を1000通以上送る場合には、料金を3%割り引きにしてもらえるます。
詳しい内容については、郵便局のサイトで確認ができます。
郵便局のホームページ参照

カスタマバーコードの仕組

郵便番号と住所の中に含まれている数字と、英字で作成されています。

『〒405-0075 山梨県笛吹市一宮町橋立1-2-30 アパートF789』のカスタマバーコードは…

40500751-2-30F789』と変換される

郵便局のホームページ参照

ActiveReportsのデザイン

  1. Barcodeコントロールを設置
  2. プロパティの【style】を『JapanesePostal』に設定する
  3. プロパティの【Text】にカスタマバーコード用キャラクタ(住所変換後の値)を設定する

グレープシティ参照

住所のカスタマバーコード変換プログラム

正規表現を使って、英字、数字、ハイフン以外を削除しています。
コードを使用する場合は、検証をお忘れ無く。

''正規表現使用のため
Imports System.Text.RegularExpressions

    ''カスタマバーコード
    Public Function str_CreateCustomerBarCode(strZip As String, ByVal strAddress As String) As String

        Dim strRetZip As String
        Dim strRetAddress As String
        Dim strRetBarcode As String

        '郵便番号にハイフンがあったら除外します------------------------------------
        strZip = StrConv(strZip, vbNarrow)
        strRetZip = Replace(strZip, "-", "", , , vbTextCompare)

        '住所の全角文字を半角に変換します------------------------------------------
        strAddress = StrConv(strAddress, vbNarrow)
        ''正規表現でa~z、A~Z、~、-(半角ハイフン)以外を削除
        Dim reg As New Regex("[^a-zA-Z0-9-]")  ''a~z、A~Z、~、-(半角ハイフン)
        strRetAddress = reg.Replace(strAddress, "")

        '変換された郵便番号と住所を結合して返します
        strRetBarcode = strRetZip & strRetAddress

        ''カスタマバーコードチェック
        If b_chkBarCode(strRetBarcode) Then
            str_CreateCustomerBarCode = strRetBarcode
        Else
            ''20文字を超えてる場合は、20文字でカットする
            str_CreateCustomerBarCode = strRetBarcode.Substring(20)
        End If

    End Function

    Public Function b_chkBarCode(ByVal BarcodeChar As String) As Boolean
        Dim regex As New Regex("[^a-zA-Z0-9-]")
        ' a~z、A~Z、~、-(半角ハイフン)以外の
        ' 不正な文字が含まれているかをチェックします。
        If (regex.IsMatch(BarcodeChar) = True) OrElse (BarcodeChar.Length > 20) Then
            ' 不正な文字が含まれているか、
            ' データが20文字を超える場合、
            ' Falseを返却します
            Return False
        Else
            ' 不正な文字が含まれておらず、
            ' データが20文字以内の場合、
            ' Trueを返却します
            Return True
        End If
    End Function
目次