Boarding Pass Parser

Boarding Pass Parser SDK for IATA BCBP Barcodes

Scan the PDF417, Aztec or QR code on a printed or mobile boarding pass and get structured passenger, flight and journey data back. barKoder's BCBP parser reads the mandatory header and leg data, the variable and security sections and baggage-related fields, on the device, inside the same SDK that scans the barcode.

From boarding pass barcode to flight data

The barcode on a boarding pass holds one long string of fixed-width fields defined by IATA. A boarding pass parser splits that string into the passenger, the flights and the extras. barKoder includes a full BCBP parser for IATA-style boarding pass payloads, so your app scans the pass and receives structured data in the same result.

What the BCBP parser does

  • Extracts the mandatory header and flight leg data
  • Supports the variable and security sections
  • Decodes baggage-related fields
  • Handles real-world non-standard payloads, such as small padding irregularities, and keeps the parse diagnostics
  • Returns structured parsed content with the scan result

How you turn it on

Set the formatting mode to BCBP to parse boarding passes explicitly. You can also use Automatic mode: it recognizes and parses BCBP barcodes after a lightweight pre-check that avoids false positives.

When BCBP formatting is on and you scan a compatible boarding pass, the result carries the parsed BCBP data in its extras, next to the raw barcode value.

Get a trial license key

What IATA BCBP (Resolution 792) is

BCBP stands for Bar Coded Boarding Pass. The IATA Passenger Services Conference approved Resolution 792 in 2004 and set BCBP as the industry standard, and the airline industry decided to use it for all boarding passes. The standard defines the data and the barcode symbologies used on paper and mobile boarding passes. It does not cover how passes are sent to passengers.

PDF417, Aztec and QR boarding passes in one barcode scanner SDK

The BCBP standard names four symbologies. Printed passes default to PDF417. Mobile passes shown on a phone screen use a matrix code, and since version 7 of the standard airlines can also request Aztec, Data Matrix or QR on printed passes. The barKoder SDK decodes all four, so one scanner covers paper, home-printed and mobile passes.

Symbologies in the BCBP standard
SymbologyWhere you see itbarKoder
PDF417The default barcode on printed boarding passesPDF417 Barcode Scanner SDK
AztecMobile passes, and printed passes on airline requestAztec Code
QR CodeMobile passes, and printed passes on airline requestQR Code
Data MatrixMobile passes, and printed passes on airline requestData Matrix

Mandatory and conditional items

Resolution 792 sorts every item into mandatory, conditional, airline individual use and security data. Some items appear once per pass. Others repeat for every flight leg.

Mandatory items

Airlines must fill these in on every pass.

  • Once per pass: format code, number of legs encoded, passenger name and electronic ticket indicator
  • For each leg: booking reference (PNR), from and to airport, operating carrier, flight number, date of flight, compartment code, seat number, check-in sequence number and passenger status

The compartment code is the cabin, not the fare class. The passenger name field is short, so long names are cut off.

Conditional and optional items

Airlines add these when their systems hold the data.

  • Once per pass: version number, passenger description, source of check-in and of boarding pass issuance, date of issue, document type, issuing airline and baggage tag numbers
  • For each leg: ticket number, selectee indicator, international documentation verification, marketing carrier, frequent flyer airline and number, free baggage allowance and fast track
  • Airline individual use, for example a frequent flyer tier
  • Security data: an optional digital signature that lets a third party check the barcode was not changed

These items come from the IATA standard. The parser reads BCBP up to version 8, the current version, and reports the version of each pass in its Version field. The JSON field names are listed under Output below.

Single-leg and multi-leg boarding passes

A BCBP can describe one flight or a whole journey of up to four legs. The pass-level items come once, followed by a repeated block for each leg, so a connection through a hub can travel on a single barcode.

  1. HeaderFormat code, number of legs encoded, passenger name and electronic ticket indicator.
  2. First legBooking reference, route, carrier, flight number, date, cabin, seat, sequence number and status, plus that leg's conditional items.
  3. Further legsThe same block repeated for each connecting flight.
  4. SecurityAn optional signature section at the end, when a local security administration requires it.

Dates without a year

The date of flight is a day of the year, from 001 to 366, and the date of issue adds only the last digit of the year (6001 is 1 January 2016). The parser returns the raw value together with a resolved Year and the ReferenceYear it used. Check the year against the scan date for passes issued near the turn of the year.

Spotting duplicate passes

The date of flight, operating carrier, flight number, check-in sequence number and departure airport identify a boarding pass without storing personal data. Use them as a key when you need to spot a pass scanned twice.

What the barKoder BCBP parser returns

Without a formatting mode you get the raw barcode string. With BCBP or Automatic formatting, the parsed boarding pass arrives in the result extras, so you don't write your own IATA BCBP decoder.

Parsed content

  • formattedJSON: the parsed data as a JSON string
  • formattedText: the parsed data as key/value pairs
  • Passenger, flight, journey and other available boarding pass fields
  • Baggage-related fields and the variable and security sections

Both are stored in result.extra. See extra metadata in results for how to read extras.

Field names in the parsed JSON

  • Always: Standard ("IATA-BCBP"), Success, Licensed, FormatCode, NumberOfLegs, PassengerName (Last, First, Raw), ElectronicTicketIndicator, ReferenceYear and the Legs array
  • Each leg: OperatingCarrierPnrCode, FromCityAirportCode, ToCityAirportCode, OperatingCarrierDesignator, FlightNumber (leading zeros kept), FlightDate (JulianRaw, Year), CompartmentCode, SeatNumber, CheckInSequenceNumber (can be empty) and PassengerStatus
  • When present on the pass: Version, PassengerDescription, SourceOfCheckIn, SourceOfBoardingPassIssuance, DateOfIssueOfBoardingPass (Raw, Year, JulianDay), DocumentType, AirlineDesignatorOfBoardingPassIssuer, and per leg AirlineNumericCode, DocumentFormSerialNumber, SelecteeIndicator, MarketingCarrierDesignator, FrequentFlyerAirlineDesignator, FrequentFlyerNumber and AirlineIndividualUse (returned raw)
  • TrailingUnparsedData: any trailing data the parser did not interpret

Warnings for imperfect passes

Real boarding passes don't always follow the standard to the character. The parser tolerates small irregularities, such as padding, and keeps the parse diagnostics.

To see them, set the custom option parser_show_warnings to 1 with setCustomOption. Warnings then appear in the Issues array of the formatted JSON when there are any. The default is 0, which leaves the array out. The option applies to the BCBP parser only.

Custom options of the native decoder library

Enable the boarding pass parser in your app

Boarding pass parsing is a formatting mode of the barKoder decoder. Set it once in the decoder configuration, scan, and read the parsed data from the result.

Android

Set the formatting type to BCBP:

Java
bkdView.config.getDecoderConfig().formattingType = Barkoder.FormattingType.BCBP;

Or use the Automatic formatting mode, where BCBP barcodes are recognized and parsed for you.

Open the Android BCBP example

iOS

Set the decoder formatting to BCBP:

Swift
guard let config = barkoderView.config else { return }
guard let decoderConfig = config.decoderConfig else { return }

decoderConfig.formatting = BCBP
Open the iOS BCBP example

The BCBP parser is available on every barKoder platform and framework: Android, iOS and the cross-platform plugins from version 1.7.1, the Web SDK from 1.7.0, and Windows, Linux and Python from 1.7.4.0. The Android and iOS examples above show the setup; on other platforms you enable the same BCBP (value 5) or Automatic formatting option.

What boarding pass parsing does not do

A BCBP payload is plain text, and anyone can print or display one. Parsing tells you what the barcode says. It doesn't tell you whether the airline still stands behind it.

What you get

  • The data encoded in the barcode, as structured fields
  • The header and flight leg data, such as route, flight, date and seat
  • Warnings when a pass doesn't follow the format exactly

What you still need to check

  • That the pass is genuine. barKoder's docs describe reading the security section, not verifying its signature.
  • That it is still active: the passenger is checked in, the seat hasn't changed and the flight is today
  • That it belongs to the person showing it, for example by comparing the name with a passport scanned with the MRZ Parser
  • That it hasn't been used already, with the duplicate key above

IATA lists duplicated, modified and forged passes as the main risks, and recommends checking the passenger against the airline's passenger list or verifying a signature on the barcode. For an access decision, check the parsed fields against the airline or airport system that owns the passenger record.

Where apps read boarding passes

Lounges, fast track lanes and other third parties rely on the standard format to read the pass the airline issued. A parser gives each of them the same structured fields.

Passenger data stays on the device

Scanning and parsing run on the device. The barKoder SDK needs an internet connection only to verify the license key, and it doesn't store personal information from scans. Your application decides what it keeps and where it sends it.

Try barKoder on your phone or in your browser

Install the free barKoder demo app, or open the web demo, and scan your own barcodes before you integrate the SDK.

iPhone and iPad

barKoder demo app for iOS

Scan with your camera, or point it at the QR code to open the App Store.

Download on the App Store
QR code linking to the barKoder demo app on the App Store

Android phones and tablets

barKoder demo app for Android

Scan with your camera, or point it at the QR code to open Google Play.

Get it on Google Play
QR code linking to the barKoder demo app on Google Play

Any modern browser

barKoder web demo

Runs the Web SDK in your browser, on desktop or mobile, with nothing to install.

Open the web demo
QR code linking to the barKoder web demo

Test with known samples. Print or display the testing sheet and scan each 1D and 2D barcode with the demo app. The data sheet summarizes the SDK for your team.

Boarding pass parser questions

What is a BCBP parser?

A BCBP parser, or boarding pass parser, turns the string in a boarding pass barcode into labeled data. It reads the fixed-width fields defined in IATA Resolution 792: passenger name, booking reference, route, carrier, flight number, date, seat and the optional items. barKoder's BCBP parser returns that content as structured data with the scan result.

What type of barcode is on a boarding pass?

Printed boarding passes use PDF417 by default. Mobile passes use Aztec, QR Code or Data Matrix, and airlines can request those on printed passes too. The barKoder SDK decodes all four, so you can use one boarding pass barcode scanner SDK for paper and phone screens.

Which platforms does the boarding pass parser support?

All of them. The BCBP parser ships in barKoder 1.7.1 for Android, iOS, React Native, Flutter, Capacitor, Cordova, .NET MAUI and NativeScript, in 1.7.0 for the Web SDK, and in 1.7.4.0 for Windows, Linux and Python. Step-by-step examples are published for Android and iOS; on the other platforms you set the same BCBP or Automatic formatting option.

Do I need to set BCBP mode, or does Automatic mode detect boarding passes?

Both work. BCBP mode applies the boarding pass parser explicitly. Automatic mode detects whether a result can be parsed and, for boarding passes, runs a lightweight pre-check first to avoid false positives. Use Automatic when your app scans boarding passes along with other parsable barcodes.

How do multi-leg boarding passes work?

The standard lets one barcode carry up to four flight legs. The passenger and pass-level items appear once, then a block of leg items repeats for each flight. barKoder's parser extracts the header and leg data. Include connecting-flight passes in your trial tests and check how the legs appear in the parsed JSON before you map them.

Does parsing prove that a boarding pass is valid?

No. Parsing reads what the barcode contains. It doesn't confirm that the pass is genuine, still active or presented by the right passenger. Check the parsed fields against the airline or airport system that holds the passenger record, and against an ID document when identity matters.

Does the parser need an internet connection?

No. Scanning and parsing run on the device. The SDK connects only for the license check, at least once every 30 days, and it doesn't store personal information from scans.

How do I get a license for the boarding pass parser?

Generate a free trial license, valid for 30 days on up to 25 devices. For production, see SDK pricing or request a quote.

Parse boarding passes in your app

Test the BCBP parser on your own printed and mobile boarding passes with a free 30-day trial, or talk to an SDK expert about your airline, airport or lounge workflow.