Code39バーコードのスタート/ストップキャラクタ("*")について
バーコード形式を Code39(Code39x)に設定した場合、スタート/ストップキャラクタである"*"は、バーコードに自動的に付加されて出力されます。そのため、データに"*"を含める必要はありません。
ただし、バーコードに付加される"*"は、バーコードのキャプション(※)には出力されません。
バーコードのキャプションに"*"を出力するには、TextBoxコントロールなどを別途配置し、そのコントロールに"*"を含めたテキストをセットしてください。
※ 以下のプロパティによって出力されるバーコードデータ文字列。
セクションレポートの場合:CaptionPositionプロパティ
ページレポート/RDLレポートの場合:CaptionLocationプロパティ
NW-7(CODABAR)バーコードのスタート/ストップキャラクタ、チェックディジットを設定する
なお、Barcodeコントロールに設定するデータの先頭と末尾の文字が、半角大文字の"A"~"D"以外の文字である場合、スタート/ストップキャラクタにはそれぞれデフォルトの"A"/"B"が自動的に設定されます。
(半角小文字の場合、無効な文字として無視されます。)
また、自動的に設定されたスタート/ストップキャラクタは、キャプションには出力されませんが、予めデータに付加されたスタート/ストップキャラクタは、キャプションに出力されます。
設定する文字列と生成されるバーコードシンボルの文字列、キャプションに出力される文字列については、以下の表をご覧ください。
Barcodeコントロールに設定する文字列 | バーコードシンボルとして出力される文字列 | キャプションに表示される文字列 |
---|---|---|
12345 | A12345B | 12345 |
A12345 | A12345 | |
12345B | 12345B | |
A12345B | A12345B | |
B12345 | B12345B | B12345 |
12345C | A12345C | 12345C |
B12345C | B12345C | B12345C |
b12345 | A12345B | 12345 |
12345a | ||
a12345b |
このため、要求仕様に応じて、チェックディジットを算出し、チェックディジット、スタート/ストップキャラクタを含んだ全てのデータをバーコードにセットする必要があります。
Code39形式のバーコードのバーの太さを補正する
BarcodeコントロールのNWRatioプロパティの値を変更することにより、Code39形式のバーコードの細いバー(ナローバー)と太いバー(ワイドバー)の比率を調整することができます。NWRatioプロパティは、基本的には規定値のまま使用することを想定していますが、バーコードリーダー側の問題などで正確にバーコードを認識できないような場合に、本プロパティの値を使用してバーの太さを調整することが可能です。
例えば、細いバーと太いバーの間の比率を1:3とする場合、NWRatioプロパティの値は3となります。
NWRatioプロパティには、0または2~3までの値が設定可能です。
NWRatioプロパティの値は以下の方法で設定することが出来ます。
また、セクションレポートの場合は、コード上でNWRatioプロパティの値を変更することも可能です。
Visual Basic
Visual Basicコード |
コードのコピー
|
---|---|
' 細いバーと太いバーの間の比率を1:2.5に設定する Me.Barcode1.NWRatio = 2.5 |
C#
C#コード |
コードのコピー
|
---|---|
// 細いバーと太いバーの間の比率を1:2.5に設定する this.barcode1.NWRatio = 2.5; |
Barcodeコントロールで、カスタマバーコード(郵便バーコード)を出力する
セクションレポートの場合は、BarcodeコントロールのStyleプロパティを、ページレポート/RDLレポートの場合は、BarcodeコントロールのSymbologyプロパティを、それぞれ"JapanesePostal"に設定した上で、以下の内容に従って使用してください。
BarCodeコントロールを使用して、カスタマバーコード(郵便バーコード)を出力するには、郵便番号と住所表示番号から生成されたカスタマバーコード用キャラクタをセットする必要があります。
セクションレポートの場合は、Textプロパティにセットするか、DataFieldプロパティを設定してデータソースにバインドさせてください。
ページレポート/RDLレポートの場合は、Valueプロパティにセットして下さい。
郵便番号と住所表示番号からカスタマバーコード用キャラクタの情報を抜き出す方法につきましては、日本郵政株式会社の下記ページの「6.バーコードに必要な文字情報の抜き出し法」をご参照ください。
[郵便番号制マニュアル]
http://www.post.japanpost.jp/zipcode/zipmanual/index.html
たとえば、以下のようなデータをBarcodeコントロールにセットします。
元となる住所データ | Barcodeコントロールにセットする値 |
---|---|
〒981-3205宮城県仙台市泉区紫山3-1-4 グレープビル2F | 98132053-1-4-2 |
〒981-3205宮城県仙台市泉区紫山3-1-4 グレープビルA棟101 | 98132053-1-4A101 |
スタート/ストップコード、空白のCC4、チェックデジットは、Barcodeコントロールによって自動的に付加されます。また、アルファベットを出力する場合、「"英数字制御コード"(CC1~CC3) + "数字"(0~9)」に変換する必要がありますが、この変換処理もBarcodeコントロールによって自動的に行われます。これらのコードを考慮する必要は特にありません。
Barcodeコントロールをカスタマバーコードとして使用する場合、セットできるカスタマバーコード用キャラクタには、以下のような条件があります。
上記の条件以外のデータをセットした場合、Barcodeコントロールが正常に出力されません。
Barcodeコントロールでカスタマバーコードを正常に出力するには、データが上記の条件を満足するかどうかをチェックする必要があります。 たとえば以下のコードでは、変換したカスタマバーコード用キャラクタの正当性を正規表現を用いてチェックしています。
Visual Basic
Visual Basic コード |
コードのコピー
|
---|---|
Private Function chkBarCode(ByVal BarcodeChar As String) As Boolean
Dim regex As New System.Text.RegularExpressions.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
|
C#
C# コード |
コードのコピー
|
---|---|
private bool chkBarCode(string BarcodeChar)
{
System.Text.RegularExpressions.Regex regex =
new System.Text.RegularExpressions.Regex("[^a-zA-Z0-9-]");
// a~z、A~Z、~、-(半角ハイフン)以外の
// 不正な文字が含まれているかをチェックします。
if ((regex.IsMatch(BarcodeChar) == true) || (BarcodeChar.Length > 20))
{
// 不正な文字が含まれているか、
// データが20文字を超える場合、
// Falseを返却します
return false;
}
else
{
// 不正な文字が含まれておらず、
// データが20文字以内の場合、
// Trueを返却します
return true;
}
}
|
また、以下のような場合は、カスタマバーコードの一部が自動的に切り捨てられます。ご注意ください。
2キャラクタ分のデータ(制御コード+数字データ)が出力されますが、それによってはみ出してしまった分は、自動的に切り捨てられ、出力されません。
(例)最終桁は制御コードとなり、21桁目の数字データは自動的に切り捨てられ、出力されません。
(例)弊社製品の住所検索ライブラリである「JPAddress」を使用することにより、わずかなコーディングで住所情報からカスタマバーコードを生成することが可能です。JPAddressは自動的に、上記で紹介したような複雑な変換やチェックを行ってカスタマバーコード用キャラクタを生成します。
[JPAddress for .NET|日本仕様の住所検索ライブラリ]
JPAddressを使用してカスタマバーコードを生成する方法は、レポート形式によって異なります。
セクションレポートの場合
セクションレポートの場合は、JPAddressのコンポーネントをレポートに配置し、GetPostalBarCodeValueメソッドを使用することで、カスタマバーコードを生成することができます。
Visual Basic コード |
コードのコピー
|
---|---|
Private Sub Detail1_Format(sender As System.Object, e As System.EventArgs) Handles Detail1.Format Barcode1.Text = GcJPAddress1.GetPostalBarCodeValue("宮城県仙台市泉区紫山3-1-4 グレープビル2F") End Sub |
C# コード |
コードのコピー
|
---|---|
private void Detail_Format(object sender, EventArgs e) { Barcode1.Text = gcJPAddress1.GetPostalBarCodeValue("宮城県仙台市泉区紫山3-1-4 グレープビル2F"); } |
ページレポート/RDLレポートの場合
レポートでJPAddressのコンポーネントを使用するには、レポートにJPAddressのアセンブリ参照を追加する必要があります。詳細は「カスタムアセンブリの作成」を参照して下さい。
GrapeCity.Win.JPAddress.GcJPAddressクラスへの参照を追加し、BarcodeコントロールのValueプロパティに以下のような式を設定することで、カスタマバーコードを生成することができます。
=Code.gcJPAddress1.GetPostalBarCodeValue("宮城県仙台市泉区紫山3-1-4 グレープビル2F")
バーコードのキャプションを均等割付で出力する
Barcodeコントロールのキャプション(※)を均等割付の形で出力するような機能は、用意されておりません。
実現方法としては、均等割付の形で出力するように設定したTextBoxコントロールを使用する方法が考えられます。
Barcodeコントロールのキャプションを非表示(None)に設定し、Barcodeコントロールと同じ幅のTextBoxコントロールを、そのBarcodeコントロールの下に配置します。
文字列が均等割付で出力されるようにそのTextBoxコントロールのプロパティを設定し、バーコードデータと同じ値をTextBoxコントロールに設定してください。
※ 以下のプロパティによって出力されるバーコードデータ文字列。
セクションレポートの場合:CaptionPositionプロパティバーコードシンボルにセットしていないデータが含まれている
Barcodeコントロールにセットしたデータの末尾に、任意のデータが付加されてバーコードシンボルが生成される場合があります。これは、Barcodeコントロールが与えられたデータを元に自動的に計算したチェックディジット(チェックサム)が付加された状態でシンボルが生成されているためです。
チェックディジットの付加は、以下のプロパティで設定することが可能です。チェックディジットが不要である場合は、これらのプロパティをFalseに設定してください。(デフォルト設定はTrueです。)
セクションレポートの場合:CheckSumEnabledプロパティ
ページレポート/RDLレポートの場合:CheckSumプロパティ
なお、Barcodeコントロールが自動計算するチェックディジットは、キャプションには出力されません。
また、全てのバーコード形式について、チェックディジットの自動付加を制御できるわけではありません。上記のプロパティによる設定が有効なバーコード形式は、以下の通りです。
Ansi39 | モジュラス43 |
Ansi39x | モジュラス43 |
Code39 | モジュラス43 |
Code39x | モジュラス43 |
Code_128_A | モジュラス103 |
Code_128_B | モジュラス103 |
Code_128_C | モジュラス103 |
Code_128auto | モジュラス103 |
Code_93 | モジュラス47 |
Code93x | モジュラス47 |
MSI | モジュラス10/ウェイト2 |
PostNet | モジュラス10 |
EAN_8 | モジュラス10/ウェイト3 |
UPC_A | モジュラス10/ウェイト3 |
RM4SCC | モジュラス6 |
UCCEAN128 | モジュラス103 |
Codabar(NW-7) | 常に付加されません |
EAN_13(JAN13) | ※ |
Code_2_of_5 | 常に付加されません |
Code25intlv | 常に付加されません |
Matrix_2_of_5 | 常に付加されません |
UPC_E0 | 常に付加されません |
UPC_E1 | 常に付加されません |
QRCode | 常に付加されません |
Code49 | 常に付加されません |
DataMatrix | 常に付加されません |
microPDF417 | 常に付加されません |
Pdf417 | 常に付加されません |
IntelligentMail | 常に付加されません |
JapanesePostal | 常に付加されます |
EAN128FNC1 | 常に付加されます(モジュラス103) |
RSS14 | 常に付加されます(モジュラス79) |
RSS14Truncated | 常に付加されます(モジュラス79) |
RSS14Stacked | 常に付加されます(モジュラス79) |
RSS14StackedOmnidirectional | 常に付加されます(モジュラス79) |
RSSExpanded | 常に付加されます(モジュラス211) |
RSSExpandedStacked | 常に付加されます(モジュラス211) |
RSSLimited | 常に付加されます(モジュラス89) |
※EAN_13(JAN13)バーコードの場合、このプロパティは無効であり、設定した文字列の長さによって、以下のような動作となります。
なお、CheckSumEnabled(CheckSum)プロパティを"True"に設定した時に自動的に付加されるチェックディジットは、キャプションには表示されません。