近來在研究條碼的實現,遇到一些坑,現在把自己遇到的一些情況分享一下。
世界上約有225種以上的條形碼
,一般較流行的有 39碼、ean碼、upc 碼、128碼,以及專門用於書刊管理的isbn、issn等。
我們先從code39碼開始:
39碼具有以下特性:
條碼的長度沒有限制,可隨著需求作彈性調整。但在規劃長度的大小時,應考慮條碼閱讀機所能允許的範圍,避免掃瞄時無法讀取完整的資料。
起始碼和終止碼必須固定為「 * 」字元。允許條碼掃瞄器進行雙向的掃瞄處理。由於39碼具有自我檢查能力,故檢查碼可有可無,不一定要設定。 條碼占用的空間較大。
可表示的資料報含有:0~9的數字,a~z的英文本母,以及「+」、「-」、「*」、「/」、「%」、「$」、「.」等特殊符號,再加上空白字元「 」,共計44組編碼,並可組合出128個ascii code的字元符號,如表所示。
表 ascii code字元符號與39碼對照表
這裡就只研究0~9的數字,a~z的英文本母,以及「+」、「-」、「*」、「/」、「%」、「$」、「.」等特殊符號,再加上空白字元「 」,這44組編碼,其他ascii碼的組合暫時不考慮;
code 39碼的編碼規則是:
1、9條線表示乙個字元;
2、黑線表示1,空線表示0;
3、線寬的表示w,窄的表示n;
4、條形碼的首尾各乙個*標識開始和結束;
5、寬條和窄條的比率為2-3之間;
6、字元和字元之間的有空白間隔;
7、校驗位可不做編碼;
編碼對映表如下:字元
邏輯型態 字元
邏輯型態 a
110101001011
wnnnnwnnwn n
101011010011
nnnnwnnwwn b
101101001011
nnwnnwnnwn o
110101101001
wnnnwnnwnn c
110110100101
wnwnnwnnnn p
101101101001
nnwnwnnwnn d
101011001011
nnnnwwnnwn q
101010110011
nnnnnnwwwn e
110101100101
wnnnwwnnnn r
110101011001
wnnnnnwwnn f
101101100101
nnwnwwnnnn s
101101011001
nnwnnnwwnn g
101010011011
nnnnnwwnwn t
101011011001
nnnnwnwwnn h
110101001101
wnnnnwwnnn u
110010101011
wwnnnnnnwn i
101101001101
nnwnnwwnnn v
100110101011
nwwnnnnnwn j
101011001101
nnnnwwwnnn w
110011010101
wwwnnnnnnn k
110101010011
wnnnnnnwwn x
100101101011
nwnnwnnnwn l
101101010011
nnwnnnnwwn y
110010110101
wwnnwnnnnn m
110110101001
wnwnnnnwnn z
100110110101
nwwnwnnnnn 0
101001101101
nnnwwnwnnn +
100101001001
nwnnnwnwnn 1
110100101011
wnnwnnnnwn -
100101011011
nwnnnnwnwn 2
101100101011
nnwwnnnnwn *
100101101101
nwnnwnwnnn 3
110110010101
wnwwnnnnnn /
100100101001
nwnwnnnwnn 4
101001101011
nnnwwnnnwn %
101001001001
nnnwnwnwnn 5
110100110101
wnnwwnnnnn $
100100100101
nwnwnwnnnn 6
101100110101
nnwwwnnnnn .
110010101101
wwnnnnwnnn 7
101001011011
nnnwnnwnwn 空白
100110101101
nwwnnnwnnn 8
110100101101
wnnwnnwnnn 9
101100101101
nnwwnnwnnn
這裡的邏輯形態,並不包括每個字元之間的空白間隙,所以在編碼的時候要再加乙個0,很多資料上都未提醒著一點,注意別踩坑。
現在直接上**:
#include #include #include #include "lcd.h"
//ÿ����ʾ�ַ���ӧ������
const char *code39databuf[43]= ;
char *code39_code(char *chartoshow, u8 len)
cheakid = cheaksum%43;
sprintf((char*)lcd_id,"lcd id:%d",cheakid);//
lcd_showstring(30,40,210,24,24,lcd_id);
//�����ǿհ�����9�����صŀհ�
strcat(pixelptr, space_code39);
//��������ʼ�ַ�*
strcat(pixelptr, bstartendbuf);
for (int i = 0; i < len; i++)
//у��
// strcat(pixelptr,code39databuf[cheakid]);
//�����ǽ����ַ�*
strcat(pixelptr, bstartendbuf);
return pixelptr;
}int code39_display( char *code39_data , u8 len)
else}}}
物聯網編碼 條碼
網際網路的編碼是ip位址,用於標識連入網際網路上的每台主機,它是每台主機唯一標識。在ipv4中,乙個ip位址由32個二進位制位元數字組成,通常被分割為4段,每段8位元,並用點分十進位制表示,每一段的取值範圍是0 255,最多容納的機器數是 255x255x255x255 約42億台。據cisco 到...
python自然語言編碼轉換模組codecs介紹
python對多國語言的處理是支援的很好的,它可以處理現在任意編碼的字元,這裡深入的研究一下python對多種不同語言的處理。有一點需要清楚的是,當python要做編碼轉換的時候,會借助於內部的編碼,轉換過程是這樣的 複製 如下 原有編碼 內部編碼 目的編碼 python的內部是使用unicode來...
編碼方式 EAN13商品條碼的結構和編碼方式
ean13商品條碼為ean條碼系統中的標準碼,共由13為數字組成 3位國家 4位廠商 5位產品 1位檢查碼 其排列如圖1。ean13商品條碼的結構和編碼方式如圖2 ean13商品條碼的結構包括 1 國家 由國際商品條碼總協會授權,我國的 位690 695,凡是我國核發的商品條碼均冠上690 695其...