FMD Barcode Decoder
Extract medicine product codes, serial numbers and expiry dates
Our free FMD barcode decoder reads EU medicines verification data from pharmaceutical Data Matrix barcodes. The unique identifier typically includes a product code, serial number, batch number and expiry date; a national reimbursement number may also be present. Decoding these fields is different from checking a pack in a medicines verification system.
Need to decode FMD barcodes in your app?
Copy the example below to get started using our free Barcode Parser API. No API key needed.
barcode=$'\x1d0109876543210982\x1d21SN12345\x1d17250630\x1d10XYZ789'
curl -sS -G https://parser.orcascan.com/ \
--data-urlencode "barcode=$barcode" \
--data-urlencode 'type=fmd'
// Node.js 18+
var barcode = "\u001d0109876543210982\u001d21SN12345\u001d17250630\u001d10XYZ789";
var url = "https://parser.orcascan.com/?barcode=" + encodeURIComponent(barcode) + "&type=fmd";
fetch(url)
.then(function(res) { return res.json(); })
.then(console.log);
import json
from urllib.parse import quote
from urllib.request import urlopen
barcode = "\u001d0109876543210982\u001d21SN12345\u001d17250630\u001d10XYZ789"
url = "https://parser.orcascan.com/?barcode=" + quote(barcode, safe="") + "&type=fmd"
with urlopen(url) as response:
print(json.load(response))
using System;
using System.Net.Http;
var barcode = "\u001d0109876543210982\u001d21SN12345\u001d17250630\u001d10XYZ789";
var url = "https://parser.orcascan.com/?barcode=" + Uri.EscapeDataString(barcode) + "&type=fmd";
using var client = new HttpClient();
Console.WriteLine(await client.GetStringAsync(url));
package main
import (
"io"
"net/http"
"net/url"
"os"
)
func main() {
barcode := "\u001d0109876543210982\u001d21SN12345\u001d17250630\u001d10XYZ789"
endpoint := "https://parser.orcascan.com/?barcode=" + url.QueryEscape(barcode) + "&type=fmd"
res, err := http.Get(endpoint)
if err != nil { panic(err) }
defer res.Body.Close()
io.Copy(os.Stdout, res.Body)
}
<?php
$barcode = "\x1d0109876543210982\x1d21SN12345\x1d17250630\x1d10XYZ789";
$url = "https://parser.orcascan.com/?barcode=" . rawurlencode($barcode) . "&type=fmd";
echo file_get_contents($url);
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
class BarcodeParser {
public static void main(String[] args) throws Exception {
String barcode = "\u001d0109876543210982\u001d21SN12345\u001d17250630\u001d10XYZ789";
String url = "https://parser.orcascan.com/?barcode=" +
URLEncoder.encode(barcode, StandardCharsets.UTF_8) + "&type=fmd";
var request = HttpRequest.newBuilder(URI.create(url)).build();
var response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<!doctype html>
<html>
<body>
<pre id="result">Loading...</pre>
<script>
var barcode = "\u001d0109876543210982\u001d21SN12345\u001d17250630\u001d10XYZ789";
var url = "https://parser.orcascan.com/?barcode=" + encodeURIComponent(barcode) + "&type=fmd";
fetch(url)
.then(function(res) { return res.json(); })
.then(function(json) {
document.getElementById("result").textContent = JSON.stringify(json, null, 2);
});
</script>
</body>
</html>
Need to decode lots of FMD barcodes?
Import a spreadsheet of barcodes and automatically extract their data into separate columns.
Decode barcodes in bulk →Need to extract FMD data as you scan?
Scan barcodes with your phone and automatically capture their data in a shared spreadsheet.
Scan with your phone →Frequently asked questions
Which fields are encoded in an EU FMD medicine barcode?
A medicine pack unique identifier includes a product code, serial number, batch number and expiry date; a national reimbursement or identification number may also be encoded where applicable.
How is FMD data represented with GS1 Application Identifiers?
In GS1-encoded FMD data, (01) indicates the product GTIN, (21) the serial number, (10) the batch or lot and (17) the expiry date. Field order and separators must be parsed correctly.
Why might an FMD scan contain an ASCII 29 separator?
GS1 variable-length fields such as serial or batch need an FNC1 separator when a subsequent field follows. Many scanners output that separator as ASCII 29 (GS).
Need help tracking FMD barcodes?
We've helped organizations of all sizes tackle barcode challenges, chat with our team live for help to find a solution.