চারটি প্রধান মোড
প্রতিটি মোড অক্ষরের পরিসর আর ঘনত্বের মধ্যে একটা বিনিময় করে। নিউমেরিক মোড শুধু অঙ্ক সামলায়, কিন্তু তিনটি অঙ্ককে ১০ বিটে ঠেসে ভরে; আর বাইট মোড যেকোনো বাইট সামলায়, তবে প্রতিটির জন্য ৮ বিট খরচ করে।
অক্ষর-সংখ্যা মিশ্র মোড ৪৫টি অক্ষরের একটি সেট ধরে: অঙ্ক ০–৯, বড় হাতের অক্ষর A–Z, স্পেস এবং $ % * + - . / ও কোলন চিহ্ন। ছোট হাতের অক্ষর এই সেটে নেই, আর সে কারণেই পুরোটা বড় হাতের অক্ষরে লেখা URL ছোট হাতের একই URL-এর চেয়ে ছোট কোড তৈরি করতে পারে।
- নিউমেরিক: অঙ্ক ০–৯, প্রতি ৩ অঙ্কে ১০ বিট
- অক্ষর-সংখ্যা মিশ্র: ৪৫টি অক্ষর, প্রতি ২ অক্ষরে ১১ বিট
- বাইট: যেকোনো ৮ বিটের মান, প্রতি বাইটে ৮ বিট
- কাঞ্জি: Shift JIS-এর দুই বাইটের অক্ষর, প্রতিটির জন্য ১৩ বিট
মোড নির্দেশক ও সেগমেন্ট
ডেটার প্রতিটি ধারা শুরু হয় ৪ বিটের একটি মোড নির্দেশক ও একটি অক্ষর গণনা দিয়ে, যার দৈর্ঘ্য মোড ও ভার্সনের ওপর নির্ভর করে। একটি কোডে এমন একাধিক সেগমেন্ট থাকতে পারে, যেমন লম্বা অঙ্কের ধারার জন্য নিউমেরিক এবং বাকিটার জন্য বাইট, যা ফলাফলকে ছোট করতে পারে।
অন্যান্য ৪ বিটের নির্দেশক অক্ষর সেটের বদলে বৈশিষ্ট্য জানায়: অক্ষর এনকোডিং ঘোষণা করার জন্য ECI, একাধিক কোডে ডেটা ভাগ করার জন্য স্ট্রাকচার্ড অ্যাপেন্ড, আর GS1 ও অন্যান্য শিল্পভিত্তিক ডেটা ফরম্যাটের জন্য FNC1। চারটি শূন্য বিটের একটি টার্মিনেটর ডেটা শেষ করে।
- নিউমেরিক 0001, অক্ষর-সংখ্যা মিশ্র 0010, বাইট 0100, কাঞ্জি 1000
- ECI 0111, স্ট্রাকচার্ড অ্যাপেন্ড 0011
- FNC1 প্রথম অবস্থান 0101, দ্বিতীয় অবস্থান 1001
- টার্মিনেটর 0000
বাইট মোড ও অক্ষর সেট
বাইট মোডের ব্যাখ্যায় স্ট্যান্ডার্ডের ডিফল্ট হলো ISO-8859-1 (Latin-1), কিন্তু আজকের বেশিরভাগ জেনারেটর UTF-8 লেখে, যাতে উচ্চারণচিহ্নসহ অক্ষর, অন্যান্য লিপি ও ইমোজি টিকে থাকে। রিডার সাধারণত বাইট পরীক্ষা করে UTF-8 শনাক্ত করে।
অক্ষর সেট যেখানে সন্দেহাতীত হতে হবে, সেখানে ECI হেডার তা স্পষ্টভাবে ঘোষণা করতে পারে। এটি না থাকলে রিডার কখনো কখনো ভুল আন্দাজ করে গোলমেলে অক্ষর দেখাতে পারে।