Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Structure & Formats

A CFI always has 6 characters, all uppercase letters, split into three parts:

PositionsLengthSegmentMeaning
11CategoryThe broadest class of instrument (e.g. E = equities)
21GroupA subdivision within the category (meaning depends on the category)
3–64AttributesFour attribute codes whose meaning depends on the category and group

Cfi exposes each part as an accessor:

  • Cfi::category() — the category code, as a char.
  • Cfi::group() — the group code, as a char.
  • Cfi::attributes() — the four attribute codes, as a [char; 4].
  • Cfi::as_str() — the whole 6-character code.

CFI has no conventional punctuated form. Its canonical rendering is simply the 6-character string, so there is no separate “compact vs. formatted” distinction. See Formatting & Display.

How the positions nest

The six positions are not independent: each narrows the meaning of the ones after it.

  • Position 1 (category) must be one of the categories ISO 10962 defines (E, C, D, R, O, F, S, H, I, J, K, L, T, M).
  • Position 2 (group) must be a group defined for that category. The same letter can be a valid group under one category and meaningless under another.
  • Positions 3–6 (attributes) must each be a code the standard permits for that specific category and group at that attribute position. The letter X conventionally marks an attribute that is “not applicable” — but only where the standard actually lists it.
use ftracker_identifiers::Cfi;

// Equity (E) / common share (S), with four attribute codes.
let equity = Cfi::parse("ESVUFR").unwrap();
assert_eq!(equity.category(), 'E');
assert_eq!(equity.group(), 'S');

// Debt (D) / bond (B) — a different category with different valid attributes.
let bond = Cfi::parse("DBFTFB").unwrap();
assert_eq!(bond.category(), 'D');
assert_eq!(bond.attributes(), ['F', 'T', 'F', 'B']);

Codes, not meanings

This crate embeds only the ISO 10962 code structure — which category, group, and attribute letters are valid, and in which combinations. It does not embed ISO’s descriptive text (the prose names and definitions of each code), which is the copyrighted part of the standard.

As a result, Cfi can confirm that ESVUFR is a well-formed equity classification and pinpoint exactly which position is wrong in a bad code, but it will not resolve V to “voting” or S to“common/ordinary shares“. If you need the human-readable meanings, consult the ISO 10962 standard itself.

A note on ordering

Cfi derives Ord directly over its underlying ASCII bytes, which matches str ordering on Cfi::as_str(). This is lexicographic string order: sorting groups CFIs by category letter, then group, and so on, but carries no taxonomic meaning beyond that.