=== Barcodegen – Barcode Generator ===
Contributors: barcodegen
Tags: barcode, barcode generator, ean-13, upc-a, code128
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Crisp, printable SVG barcodes: EAN-13, EAN-8, UPC-A, Code 128, Code 39 and ITF-14, from a shortcode, a block or your dashboard.

== Description ==

Barcodegen adds real barcodes to WordPress. Type a value, pick a format, and you get a clean vector barcode that prints sharply at any size — product pages, packing slips, invoices, tickets, shelf labels, asset tags, anything.

**Six formats, generated locally**

* **EAN-13** — retail products worldwide (12 or 13 digits, check digit calculated for you)
* **EAN-8** — small retail packages
* **UPC-A** — retail products in the US and Canada
* **Code 128** — the all purpose format for internal codes, tickets and documents, with automatic code set selection (A/B/C) and the correct check digit
* **Code 39** — still common on older industrial equipment
* **ITF-14** — cartons and shipping labels, with the GTIN-14 check digit

**How it renders**

Every barcode is written as inline SVG by PHP. There is no image file to manage, no JavaScript, and no canvas: the bars stay sharp on retina screens and come out of a laser printer perfectly. Guard bars extend below the digit row and the number system digits sit in the quiet zones, so EAN-13 and UPC-A output looks like a real retail label, not a screenshot.

**Three ways to add one**

1. The **[barcodegen]** shortcode, with attributes for every option.
2. The **Barcode** block, with a live preview in the editor.
3. **Tools → Barcode Generator** in your dashboard, which also hands you a ready made shortcode.

**Privacy and performance**

Nothing is sent anywhere. There are no external requests, no trackers, no cookies and no third party libraries — the encoders are about a thousand lines of PHP written for this plugin. Barcodes render on the server, so they work in feeds and emails and add nothing to your page weight budget.

= Shortcode =

`[barcodegen format="ean13" value="5901234123457"]`

Every attribute is optional except the value:

* **format** — code128 (default), code39, ean13, ean8, upca or itf14. The advanced values code128a, code128b, code128c and itf are accepted too
* **scale** — module width in pixels, 0.5 to 10 (default 2)
* **height** — bar height in pixels (default 60)
* **text** — print the value under the bars, "yes" or "no"
* **bar_color** — any CSS colour, default #000000
* **bg_color** — any CSS colour, or "transparent"
* **padding** — extra space around the bars, in pixels
* **class** — extra CSS class on the SVG
* **align** — left, center or right

Enclosed content also works, which is handy when the value contains quotes:

`[barcodegen format="code39"]HELLO WORLD[/barcodegen]`

If a value cannot be encoded — a five digit EAN-13, a lower case letter in Code 39 — you will see the reason while editing and visitors will see nothing at all.

= Formats =

What each format accepts, so you get it right the first time.

* **code128** — ASCII 0-127, any length. The check digit is calculated for you. The default, and the best choice for internal codes.
* **code39** — digits, A-Z and - . space $ / + %. Lower case is converted to upper case for you.
* **ean13** — 12 digits, or 13 with the check digit. A wrong check digit is corrected rather than printed.
* **ean8** — 7 digits, or 8 with the check digit.
* **upca** — 11 digits, or 12 with the check digit.
* **itf14** — 13 digits, or 14 with the check digit. Cartons and shipping labels.

Non-digit characters are stripped from EAN, UPC and ITF values, so `590-1234-123457` encodes exactly like `5901234123457`. Values with accents or non-Latin characters are rejected by Code 128 and accepted by Code 39 only if they are in the Latin-1 range.

== Installation ==

1. In your dashboard go to Plugins → Add New and search for "Barcodegen".
2. Click Install Now, then Activate.
3. Open Tools → Barcode Generator to make your first barcode, or paste `[barcodegen format="ean13" value="5901234123457"]` into any post.

== Frequently Asked Questions ==

= Does it send my data anywhere? =

No. Encoding happens in PHP on your own server. The plugin makes no HTTP requests at all, so it is safe to use behind a firewall and it cannot leak product codes.

= Can I print the barcodes? =

Yes. The output is vector SVG, so it stays sharp at any size and prints cleanly on labels, packing slips and thermal printers.

= Does it work with WooCommerce? =

Yes. Put the shortcode in a product description, or print barcodes on order emails and invoices with the same shortcode.

= Can I remove the link back to barcodegen.net? =

It is already removed: the plugin adds no visible link by default. If you would like to credit the plugin there is an opt-in switch on the settings screen.

= Why is there no QR Code? =

QR, Data Matrix, PDF417 and Aztec are 2D formats that need a very different encoder, and they are on the roadmap. Until then [barcodegen.net](https://www.barcodegen.net/) generates them for free in the browser, along with bulk CSV generation and ZIP export.

= Which format should I use? =

Code 128 for anything internal — SKUs, order numbers, tickets, asset tags. EAN-13 for products sold worldwide, UPC-A for the US and Canada, EAN-8 when a small package has no room for thirteen digits, ITF-14 for shipping cartons. If a shop scanner has to read it, use EAN-13 or UPC-A. If it is only for your own tracking, Code 128 is narrower and scans just as reliably.

= My printed barcode will not scan. Why? =

Nine times out of ten it is print scaling. Print at 100%, never "Fit to page". If that does not fix it, raise scale to 2 or more, make sure the quiet zone around the bars is not cropped, and keep the bars black on white — red, light or low contrast bars will not read.

= Do I need to calculate the check digit? =

No. Supply 12 digits for an EAN-13, 11 for a UPC-A, 7 for an EAN-8 or 13 for an ITF-14 and the check digit is added for you. If you supply the full length with a wrong check digit it is corrected rather than printed, so you cannot publish a symbol that scanners reject.

= Does it work with page builders? =

Yes. The Barcode block is a normal Gutenberg block and the shortcode is a normal shortcode, so both work in Elementor, Divi, WPBakery, Beaver Builder and the Classic Editor with no extra setup.

= My barcode does not appear. What now? =

While you are logged in as an editor the plugin prints the exact reason — usually a value that is too short for the format. Check the format hint on the generator screen for the accepted length.

== Screenshots ==

1. EAN-13, UPC-A and EAN-8 with retail style guard bars and digit groups.
2. Code 128, Code 39 and ITF-14 output.

== Changelog ==

= 1.0.0 =
* Initial release. EAN-13, EAN-8, UPC-A, Code 128 (auto, A, B, C), Code 39 and ITF-14, shortcode, block and dashboard generator.
