@point-of-sale/barcode-parser
Version:
[](https://www.npmjs.com/@point-of-sale/barcode-parser) 
197 lines (134 loc) • 5.73 kB
Markdown
# BarcodeParser
[](https://www.npmjs.com/@point-of-sale/barcode-parser)

> This library is part of [@point-of-sale](https://point-of-sale.dev), a collection of libraries for interfacing browsers and Node with Point of Sale devices such as receipt printers, barcode scanners and customer facing displays.
<br>
## What does this library do?
This library provides common barcode parsing functions used by the [WebHIDBarcodeScanner](https://github.com/NielsLeenheer/WebHIDBarcodeScanner), [WebSerialBarcodeScanner](https://github.com/NielsLeenheer/WebSerialBarcodeScanner), [WebcamBarcodeScanner](https://github.com/NielsLeenheer/WebcamBarcodeScanner) and [KeyboardBarcodeScanner](https://github.com/NielsLeenheer/KeyboardBarcodeScanner) libraries.
<br>
## How to use it?
This library is not intended to be used as a standalone direct dependancy. There is no guarantee for a stable API.
To use this library you first need to install it:
```
npm i @point-of-sale/barcode-parser
```
And import it:
```js
import { Aim, GS1, Detector, Symbologies } from '@point-of-sale/barcode-parser';
```
<br>
### AIM
Some barcode scanners give back an AIM Code Identifier which gives information about the barcode symbology and certain other options.
To parse the AIM Code Identifier call the `Aim.decode()` function. It requires two parameters: the 3 character AIM Code Indentifier, starting with a `]`, and the remaining value of the barcode.
```js
let result = Aim.decode(']E0', '3046920029759');
```
The result will be an object with a key for the symbology:
```js
{
symbology: 'ean13'
}
```
Optionally there will be a key `model` for the QR code model and a key `fnc1` that tells us if the `FNC1` character is the first of second character of the encoded data.
<br>
### GS1
Retail and warehouses often use barcodes that encode GS1 data. For example ITF-14, EAN and UPC barcodes encode the GS1 GTIN. Additionally a GS1 Digital Link QR Code, GS1 Datamatrix, GS1-128 or GS1 Databar can encode other GS1 elements.
To parse the GS1 data from a barcode you can call the `GS1.decode()` function. It only requires one parameter, an object with the following properties:
- `value`<br>
The value of the barcode, for example: `3046920029759`.
- `symbology`<br>
The symbology of the barcode, for example: `ean13`.
- `fnc1`<br>
Optionally the value of the `fnc1` property returned by the `AIM.decode()` function.
<br>
For example:
```js
let result = GS1.decode({
value: '3046920029759',
symbology: 'ean13'
});
```
Or:
```js
let result = GS1.decode({
value: '010304692002975915251031',
symbology: 'gs1-128',
fnc1: 1
});
```
Or:
```js
let result = GS1.decode({
value: 'https://example.com/01/03046920029759?15=251031',
symbology: 'qr-code'
});
```
The first one will result in an object with the GS1 GTIN as the only element:
```js
{
gtin: '03046920029759',
elements: [
{
ai: '01',
label: 'GTIN',
value: '03046920029759'
}
]
}
```
The two below that will get an object with two elements:
```js
{
gtin: '03046920029759',
elements: [
{
ai: '01',
label: 'GTIN',
value: '03046920029759'
}, {
ai: '15',
label: 'BEST BEFORE or BEST BY',
value: '251031'
}
]
}
```
The object that is returned contains the following properties:
- `gtin`<br>
Optionally, when the barcode contains a GTIN, the value of the GTIN.
- `elements`<br>
An array for each element of the GS1 data. Each element is an object with an `ai` property for the application id, an `label` property containing a human readable description and `value` for the value of the element.
<br>
### Detector
Guess the symbology based on the format of the barcode. Call the `Detector.detect()` function with the barcode data as a parameter.
```js
let result = Detector.detect('3046920029759')
```
This results in an object with the following properties:
- `symbology`<br>
The likely symbology for this barcode. It's a guess, but sometimes an educated guess.
- `guess`<br>
Boolean that indicates if it is a completely guess, or if there if we're certain about our guess.
The example above will result this:
```js
{
symbology: 'ean13',
guess: false
}
```
The barcode contains 13 digits, which makes it likely that it is a EAN-13 barcode. Additionally we've verified that the last digit is indeed the correct check digit, so we're pretty sure it is actually an EAN-13 barcode.
If the detector cannot make a determination what type of barcode it is, the function will return `undefined`.
<br>
### Symbologies
Functions that help with specific symbologies. Right now there is only one function defined, for helping with UPC-E barcodes.
#### UPC-E
UPC-E barcodes are similar to UPC-A barcodes, but zero's in the barcode value are compressed, making the barcode physically smaller. Call the `Symbologies.UPCE.expand()` function to convert the compressed UPC-E barcode back to it's original value.
```js
let result = Symbologies.UPCE.expand('02345673')
```
Will result in a string with the following value: `023456700003`.
<br>
-----
<br>
This library has been created by Niels Leenheer under the [MIT license](LICENSE). Feel free to use it in your products. The development of this library is sponsored by Salonhub.
<a href="https://salonhub.nl"><img src="https://salonhub.nl/assets/images/salonhub.svg" width=140></a>