یکی از ابهاماتی که خیلیها دارند درباره روش تحلیل بارکد است. در این مطلب سعی میکنم به بیان ساده بارکد را تشریح کنم:
۱- کلمه بارکد:
اولاً خیلیها فکر میکنند «بارکد» یک کلمه فارسی است و معنی آن «کدِ روی بار» است! در حالی که این کلمه یک کلمه انگلیسی به صورت Bar Code و به معنی «کد میلهای» است. (Bar یعنی میله؛ به تیرآهن هم Bar گفته میشود. Bar Chart هم که بارها در اکسل دیدهاید؛ نمودار میلهای)
اما برخی کلمات هستند که وقتی وارد زبان فارسی میشوند، خودشان یک برداشت شبیه به مفهوم فارسی را القا میکنند؛ در این موارد به نظر میرسد «فرهنگستان ادب و زبان فارسی» موافق است که آن کلمه به همان صورت وارد زبان فارسی شود. مثلاً همانطور که در مطلب «فهرستی از واژههایی که از زبان فرانسوی و روسی و دیگر زبانها وارد زبان فارسی شده است» گفتم، واژه «آسانسور» (Ascenseur) یک واژه فرانسوی است که از واژه Ascension در انگلیسی به معنی صعود کردن یا معراج، ساخته شده؛ همان مرتبسازی صعودی یا ASC که در برنامهنویسی داریم. اما چون همین «آسانسور» از قضا با معنی فارسی آن هم متناسب است (آسان سُر خوردن)، همین کلمه را در فارسی بدون ترجمه به کار میبریم. (Bar Code هم اگر میخواست به فارسی ترجمه شود، احتمالاً همان «کد روی بار» و سپس «بارکد» بهترین ترجمه بود؛ البته «رمزینه» هم گاهی اوقات به عنوان جایگزین شنیده میشود)
۲- انواع بارکد:
انواع بسیار زیادی از بارکد وجود دارد که لیستی از آنها را میتوانید در این صفحه از ویکیپدیا ببینید: Barcode
اما از بین آنها دو نوع بار کد عمومیتر شدند:
یکی بارکد اصیل:
و یکی بارکد دوبعدی یا ماترسی که از بین انواع آنها QR Code (مخفف Quick Response Code یا کد با پاسخدهی سریع) عمومی شده است:
در این مطلب ما درباره نوع اول بارکد صحبت میکنیم...
۳- کد سراسری محصول یا UPC
پیش از اینکه بدانید بارکد چگونه کار میکند اولاً باید بدانید بارکد اولین بار به سفارش یک فروشگاه زنجیرهای در آمریکا جهت شناسایی محصول در هنگام پرداخت مبلغ تهیه و اختراع شد (ظاهراً فرایند اختراع آن از سال ۱۹۳۲ تا ۱۹۶۶ که تجاری شد طول کشیده است). ثانیاً کدهای مختلفی در زمانهای مختلف معرفی شد اما در سال ۱۹۷۰ یک کد دوازده رقمی معرفی شد و تا سالها از همان کد برای شناسایی هر نوع محصول (از چیپس تا کتاب) استفاده میشد. به این کد دوازده رقمی در اصطلاح UPC یا Universal Product Code گفته میشد. ساختار این کد به شکل زیر بود:
- رقم اول از چپ، در UPC نشاندهنده Digit System یا سیستم کدگذاری است که رقم 0 و 1 و 6 و 7 و 8 و 9 برای اکثر محصولات استفاده میشود. رقم 2 برای محصولات وزنکردنی مثل گوشت و... است. رقم 3 نماد دارو است. رقم 4 برای هدایای وفاداری در خرید است و رقم 5 نماد کوپن.
- پنج رقم بعدی کد خاص شرکت تولیدکننده محصول است.
- پنج رقم بعدی، کد خاص آن محصول در آن شرکت است (مثلاً کد تیتاپ در شرکت سالمین...).
- رقم آخر هم Checksum یا «چکیده وارسی» یا «سرجمع» است که من در مطلب «CheckSum چیست؟ (درباره الگوریتم کشف خطای مجموع مقابلهای)» به طور کامل در مورد آن صحبت کردم و مثلاً گفتم که ما چطور از روی چکسام میفهمیم که شما کد ملیتان را در هنگام ثبتنام اشتباه وارد کردهاید...
- نکته جالب این است که دو رقم اول و آخر همیشه خارج از محدوده بارکد چاپ میشوند تا اطراف بارکد یک Gap یا فضای خالی قرار گیرد تا بارکدخوان بهتر بتواند بارکد را شناسایی کند. (بارکد به نوشتهها و طرحهای اطراف خود نچسبد)
۴- شماره کالای بینالمللی یا EAN
مدتی هست که به جای UPC از EAN یا European Article Number (شماره کالای اروپایی) که ویکیپدیا آنرا International Article Number (شماره کالای بینالمللی) میداند استفاده میشود.
- در این روش کدگذاری، سه رقم اول (و در برخی موارد دو رقم اول) از سمت چپ کد کشور تولیدکننده محصول را مشخص میکند؛ لیست کامل کد کشورها را اینجا ببینید. مثلاً کد ایران 626 است. همین حالا یک کالای تولید ایران (مثلاً یک خوراکی) را بردارید و ببینید که ابتدای بارکد آن 626 نوشته شده است. اگر رقم اول با 0 شروع شود، یعنی ۱۲ رقم بعدی یک کد UPC است که به EAN تبدیل شده.
- چهار یا پنج رقم بعد، کد خاص شرکت تولیدکننده محصول در آن کشور است.
- پنج رقم بعدی کد آن محصول خاص در آن شرکت خاص است.
- رقم آخر مجدداً checksum است. (به طور خلاصه: از روی چکسام میشود فهمید که شما ۱۲ رقم قبل را درست وارد کردهاید یا خیر؟ اگر یکی از ارقام را اشتباه وارد کنید، چکسام عوض میشود و از روی این تفاوت در محاسبه و تفاوت در تایپ شما میشود فهمید که در وارد کردن آن کد اشتباه رخ داده)
۵- این خطهای عمودی در بارکد به چه معناست؟ بارکدخوان چگونه این خطها را تبدیل به عدد میکند؟
موضوع اصلی بحث این مطلب این است که این خطهای عمودی چطور تحلیل میشود؟ بارکدخوان چطور آنها را میخواند؟
ابتدا به این بارکد مثالی دقت کنید:
به طور خلاصه:
- بارکدها به تعدادی خط با طول مساوی تقسیم میشوند که هر خط سیاه نماد 1 و خط سفید نماد 0 است. بنابراین میتوانید بفهمید که بارکدها زبان باینری (Binary) یا دودویی دارند.
- بارکد EAN به ۹۵ قسمت تقسیم میشود که من با رنگ خاکستری آن ۹۵ قسمت را در تصویر بالا مشخص کردهام. اگر بشمارید، خواهید دید که ۹۵ تا است.
- خلاصه ماجرا این است که بارکدخوان، این رنگهای سیاه و سفید را میخواند و بر اساس آنها یک سری 0 و 1 را استخراج میکند. مثلاً چند بیت اول کد باینری بارکد بالا این است:
10101110110110011001100100110...
سپس طبق فرمول EAN شروع به محاسبه عدد مربوط به کالا میکند:
۱- سه بیت اول نماد «شروع بارکد» است که همیشه 101 است.
۲- ۴۲ بیت بعدی به ۶ قسمت ۷ بیتی تقسیم میشود. که این هفت بیت که در حقیقت نماد یک عدد دهدهی است، طبق جداولی به عدد دهدهی معادل خود تبدیل میشود. که توضیح مفصل آنها در اینجا موجود است.
۳- ۵ بیت بعدی که همیشه به صورت 01010 است، مشخصکننده Center یا وسط بارکد است.
۴- مجدداً ۴۲ بیت بعدی به ۶ قسمت ۷ بیتی تقسیم میشود و آن هم برای رمزگشایی نیاز به مراجعه به جداولی دارد که در لینک بالا موجود است.
۵- سه قسمت آخر که همیشه به صورت 101 است، پایان بارکد را مشخص میکند.
- نکته جالب این است که برای اینکه خطوط سیاه یا سفید بیش از حد به هم نچسبند که کار بارکدخوان را مختل کنند، رمزگذاری طوری تنظیم شده که خطوط سیاه و سفید هیچ وقت بیشتر از 4 بار کنار هم قرار نمیگیرند.
- رقمهای ۷ بیتی در سمت چپ طوری کدگذاری شدهاند که همیشه با 0 (یعنی خط سفید) شروع میشوند و با 1 (یعنی خط سیاه) پایان میپذیرند و رقمهای سمت راست برعکس، با 1 شروع میشوند و با 0 ختم.
همانطور که گفتم، اینکه این 0 و 1 ها چطور به یک عدد دهدهی تبدیل میشوند، روال نسبتاً پیچیدهای دارد که در لینک بالا توضیح داده شده و خارج از حوصله این مطلب است.
بیشتر میخواستم بدانید که این خطوط در حقیقت نماد 0 و 1 هستند و نکات جالبی دارند که در این مطلب به آنها اشاره کردم.
دیدن این دو ویدئو هم در مورد بارکد و QR Code پیشنهاد میشود: بارکد چیست؟ | QR Code چیست؟
موفق باشید؛
حمید رضا نیرومند