JAVA：多種類のバーコードの生成とスキャンを実現します

バーコードは可視化され、機械で読み取り可能なデータであり、これらのデータは通常そのバーコードを運ぶものに関する情報を記述している。バーコードは商品流通、図書管理、郵便管理、銀行システムなどの分野で広く使われています。この記事では、一般的な一次元と二次元バーコードの生成と走査について説明します。

必要なツール:

- [Free Spire.Barcode for Java](https://www.e-iceblue.com/Download/barcode-for-java-free.html) 
- Intellij IDEA

以下は無料バージョンでサポートされているバーコードタイプのリストです。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/2b082015-70a4-c06b-ed13-45c5dfba9af3.png)
:top: P.s. もっとバーコードの種類がほしいです。[Spire.Barcode for Java]()商業版を参考にしてください。

:one: Barcode生成:

バーコードの生成は二つの重要な種類に及んでいます。一つはBarceode Settingsで、もう一つはBarceode Generatorです。Barch odeSettingsはバーコードをカスタマイズするための特定のタイプで、データ、サイズ、色などです。Barceode Generatorは、BarcedeSettingsをベースに画像データを作成します。上の表にサポートされている部分バーコードの生成は以下の通りです。

:black_small_square:Codebar: 

```java

import com.spire.barcode.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
public class CODABAR {
    public static void main(String[] args) throws Exception {
	//Create the BarcodeSettings
        BarcodeSettings settings = new BarcodeSettings();
	//Set data
        settings.setData("2030405060");
	//Set the Symbology property
        settings.setType(BarCodeType.CODABAR);
	//Set Show Text location on bottom
        settings.setShowTextOnBottom(true);
	//Set border is visible
        settings.hasBorder(true);
	//Set the CodabarStartChar and CodebarStopChar
        settings.setCodabarStartChar(CodabarChar.B);
        settings.setCodabarStopChar(CodabarChar.D);
	//Create the BarcodeGenerator
        BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);
	//Get image from the BarcodeGenerator
        BufferedImage bufferedImage = barCodeGenerator.generateImage();
	//Save the image
        ImageIO.write(bufferedImage,"png",new File("CODABAR.png"));
    }
}
```
実行効果:
 ![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/20154ee9-0221-6d1a-a583-5b68087deb33.png)

:black_small_square:Code11：

```java
import com.spire.barcode.BarCodeGenerator;
import com.spire.barcode.BarCodeType;
import com.spire.barcode.BarcodeSettings;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class CODE_11 {
    public static void main(String[] args) throws IOException {

	//Create the BarcodeSettings
        BarcodeSettings settings = new BarcodeSettings();
        //Set Data
        settings.setData("12345-67890"); 
	//Set the Symbology property
        settings.setType(BarCodeType.CODE_11);
	//Set ShowText location on bottom
        settings.setShowTextOnBottom(true);
	//Set Border is visible
        settings.hasBorder(true);
	//Create the BarCodeGenerator
        BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);
	//Get image from the BarCodeGenerator
        BufferedImage bufferedImage = barCodeGenerator.generateImage();
	//Save the image
        ImageIO.write(bufferedImage,"png",new File("CODE_11.png"));

    }
}
```
実行効果:
 ![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/c20904b0-a3ca-7f6a-c4f1-9ae9f5306a5d.png)
:black_small_square:Code 39：

```java
import com.spire.barcode.BarCodeGenerator;
import com.spire.barcode.BarCodeType;
import com.spire.barcode.BarcodeSettings;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class CODE_39 {
    public static void main(String[] args) throws IOException {
        //Create the BarcodeSettings
        BarcodeSettings settings = new BarcodeSettings();
        //Set Data
        settings.setData("Bar 987654321");
        //Set the Symbology property
        settings.setType(BarCodeType.CODE_39);
        //Set ShowText location on bottom
        settings.setShowTextOnBottom(true);
        //Set Border is visible
        settings.hasBorder(true);
        //Create the BarCodeGenerator
        BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);
        //Get image from the BarCodeGenerator
        BufferedImage bufferedImage = barCodeGenerator.generateImage();
        //Save the image
        ImageIO.write(bufferedImage,"png",new File("CODE_39.png"));

    }
}
```
実行効果:
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/7cba569c-2669-b76d-8da8-c96212c4684a.png)

:black_small_square:Code 128:

```java
import com.spire.barcode.BarCodeGenerator;
import com.spire.barcode.BarCodeType;
import com.spire.barcode.BarcodeSettings;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class CODE_128 {
    public static void main(String[] args) throws IOException {
        //Create the BarcodeSettings
        BarcodeSettings settings = new BarcodeSettings();
        //Set Data
        settings.setData("ABCD 12345 abcd");
        //Set the Symbology property
        settings.setType(BarCodeType.CODE_128);
        //Set ShowText location on bottom
        settings.setShowTextOnBottom(true);
        //Set Border is visible
        settings.hasBorder(true);
        //Create the BarCodeGenerator
        BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);
        //Get image from the BarCodeGenerator
        BufferedImage bufferedImage = barCodeGenerator.generateImage();
        //Save the image
        ImageIO.write(bufferedImage,"png",new File("CODE_128.png"));

    }
}
``` 

実行効果:
 ![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/4c2996cb-0241-90a9-52a1-b8fd3710df93.png)
:black_small_square:QR_Code:

```java
import com.spire.barcode.BarCodeGenerator;
import com.spire.barcode.BarCodeType;
import com.spire.barcode.BarcodeSettings;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class QR_CODE {
    public static void main(String[] args) throws IOException {
	 //Create the BarcodeSettings
        BarcodeSettings settings = new BarcodeSettings();
	 //Set Data
        settings.setData("ABC 123456789");
	 //Set the Symbology property
        settings.setType(BarCodeType.QR_CODE);
	 //Set the QR_CODE size
        settings.setX(2);
	 //Set ShowText location on bottom
        settings.setShowTextOnBottom(true);
	 //Set Border is visible
        settings.hasBorder(true);
	 //Create the BarCodeGenerator
        BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);
         //Get image from the BarCodeGenerator
        BufferedImage bufferedImage = barCodeGenerator.generateImage();
	 //Save the image
        ImageIO.write(bufferedImage,"png",new File("QR_CODE.png"));

    }
}
```


実行効果:
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e05b323a-a563-4e09-668d-5435c92be460.png)
:two:Barcodeスキャン:

いくつかのバーコードの集合を一緒にスキャンし、Barcode Scanner類のscan（）方法で複数のバーコードデータを読み取る試みです。画像とコードは以下の通りです。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/8f067214-ebee-ee79-5d43-9d5fbbf80719.png)

```java
            public class Scan {
            public static void main(String[] args) throws Exception {

                  //Get code information by scanning the image   
             String[] s=BarcodeScanner.scan("C:\\Users\\Administrator\\Desktop\\Barcode.png");
                  for (int i=0;i< s.length ;i++){
                 System.out.println(s[i]);
                     }
                   }
                 }
```

実行効果:
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/3845fac2-1e12-1ff1-2f66-cd921b294377.png)