[ 用户登陆 ] [ 免费注册 

分类 >> 学习资料 > 程序技术 > VFP >
纯VFP实现EAN-13条码
文 . 2008/8/20 11:01:47
EAN码是国际物品编码协会制定的一种商品用条码,通用于全世界。EAN码符号有标准版(EAN-13)和缩短版(EAN-8)两种,我国的通用商品条码 与其等效。我们日常购买的商品包装上所印的条码一般就是EAN码。我这里给出的是EAN-13的算法代码,大家如果需要EAN-8条码可以自行修改下。

本算法中的编码规则如有误,请自行修正!

*      函 数 名:EAN13()
*      功    能:根据条EAN-13码符号字符串生成条码位图
*      参    数:BM 字符型(12位EAN-13码符号字符串 如:'690102818039')
*      返 回 值:生成的条码位图的文件名
*      运行环境:WIN95以上版本。Visual FoxPro 6.0,7.0,8.0,9.0
*      算法制作:行者孙(QQ:310727570)-VFP应用程式算法群(12787940)
*      说       明:转载请保留出处!

*      以下是修正版

Function EAN13(BM As String )

Local BMZ,h,i,ii,JY_A,JY_B,JYM,k1,k2,k3,k4,MODE,Pw,;
st1,st2,st3,st4,st5,zh,pb,td


    Dimension EAN_code[10,3]
    EAN_code[1,1]='00000011110011'
    EAN_code[1,2]='00110000111111'
    EAN_code[1,3]='11111100001100'

    EAN_code[2,1]='00001111000011'
    EAN_code[2,2]='00111100001111'
    EAN_code[2,3]='11110000111100'

    EAN_code[3,1]='00001100001111'
    EAN_code[3,2]='00001111001111'
    EAN_code[3,3]='11110011110000'

    EAN_code[4,1]='00111111001100'
    EAN_code[4,2]='00001111110011'
    EAN_code[4,3]='11000000001100'

    EAN_code[5,1]='00110000001111'
    EAN_code[5,2]='00001111110011'
    EAN_code[5,3]='11001111110000'

    EAN_code[6,1]='00111100000011'
    EAN_code[6,2]='00111111000011'
    EAN_code[6,3]='11000011111100'

    EAN_code[7,1]='00110011111111'
    EAN_code[7,2]='00000011001111'
    EAN_code[7,3]='11001100000000'

    EAN_code[8,1]='00111111001111'
    EAN_code[8,2]='00001100000011'
    EAN_code[8,3]='11000000110000'

    EAN_code[9,1]='00111100111111'
    EAN_code[9,2]='00000011000011'
    EAN_code[9,3]='11000011000000'

    EAN_code[10,1]='00000011001111'
    EAN_code[10,2]='00001100111111'
    EAN_code[10,3]='11111100110000'

    Dimension EAN_left[10]
    EAN_left[1]='111111'
    EAN_left[2]='112122'
    EAN_left[3]='112212'
    EAN_left[4]='112221'
    EAN_left[5]='121122'
    EAN_left[6]='122112'
    EAN_left[7]='122211'
    EAN_left[8]='121212'
    EAN_left[9]='121221'
    EAN_left[10]='122121'

    Dimension EAN_mode[8]
    Store '' To EAN_mode
    If Len(Alltrim(BM))<>12 .And. Val(BM)>0
        Messagebox('EAN-13编码长度不规范',268,'信息提示')
        Return ''
    Else
        EAN_mode[1]='000000000000000000'
        EAN_mode[2]='110011'

        For i=0 To 9
            If Val(Substr(BM,1,1))=i
                For ii=1 To 6
                    BMZ=Val(Substr(BM,ii+1,1))

                    MODE=Val(Substr(EAN_left[i+1],ii,1))
                    EAN_mode[3]=EAN_mode[3]+EAN_code[BMZ+1,MODE]
                Endf
            Endi

        Endf
        EAN_mode[4]='0011001100'
        For i=1 To 5
            BMZ=Val(Substr(BM,i+7,1))

            EAN_mode[5]=EAN_mode[5]+EAN_code[BMZ+1,3]
        Endf
        JY_A=0
        JY_B=0

        For i=1 To 12
            If i%2=0
                JY_A=JY_A+Val(Substr(BM,i,1))
            Else

                JY_B=JY_B+Val(Substr(BM,i,1))
            Endif
        Endf
        JYM=10-(JY_A*3+JY_B)%10

        If JYM=10
            JYM=1
        Endi
        EAN_mode[6]=EAN_code[JYM+1,3]

        EAN_mode[7]='110011'
        EAN_mode[8]='000000000000000000'
        EAN_code=EAN_mode[1]+EAN_mode[2]+EAN_mode[3]++EAN_mode[4]+EAN_mode[5]+EAN_mode[6]+EAN_mode[7]+EAN_mode[8]
        Dimension BMP[4]

        BMP[4]=90
        BMP[3]=224
        BMP[2]=Int((BMP[3]*3+3)/4)*4*BMP[4]+54
        BMP[1]=BMP[2]-54

        Dimension BMP_T[4]
        For i=1 To 4
            k1='0x'+Subs(Righ(Tran(BMP[i],"@0"),8),7,2)
            k2='0x'+Subs(Righ(Tran(BMP[i],"@0"),8),5,2)
            k3='0x'+Subs(Righ(Tran(BMP[i],"@0"),8),3,2)
            k4='0x'+Subs(Righ(Tran(BMP[i],"@0"),8),1,2)

            BMP_T[i]=Chr(&k1)+Chr(&k2)+Chr(&k3)+Chr(&k4)
        Endf
        st1='BM'+BMP_T[2]+Chr(0)+Chr(0)+Chr(0)+Chr(0)+Chr(54)+Chr(0)+Chr(0)+Chr(0);
            +Chr(40)+Chr(0)+Chr(0)+Chr(0)+BMP_T[3]+BMP_T[4]+Chr(1)+Chr(0)+Chr(24)+Chr(0)+Chr(0)+Chr(0)+Chr(0)+Chr(0)+BMP_T[1]+Chrt(Spac(16),' ',Chr(0))
        st2=Chrt(Spac(224*10*3),' ',Chr(255))
        st3=''
        For i=11 To 70

            For k1=1 To 224
                If Substr(EAN_code,k1,1)=='1'
                    st3=st3+Chr(0)+Chr(0)+Chr(0)
                Else

                    st3=st3+Chr(255)+Chr(255)+Chr(255)
                Endi
            Endf
        Endf

        Pb=Chr(0)+Chr(0)+Chr(0)
        Pw=Chr(255)+Chr(255)+Chr(255)
        st4=Chrt(Spac(18*3),' ',Chr(255))+Pb+Pb+Pw+Pw+Pb+Pb+Chrt(Spac(84*3),' ',Chr(255))+Pw+Pw+Pb+Pb+Pw+Pw+Pb+Pb+Pw+Pw+Chrt(Spac(84*3),' ',Chr(255))+Pb+Pb+Pw+Pw+Pb+Pb+Chrt(Spac(16*3),' ',Chr(255))
        st4=st4+st4

        Dimension T_D[11]
        T_D[1]='11111000111111111100000111111110111100111111101111101111111011111011111110111110111111101111101111'+;
                '11101111101111111011111011111110111110111111101111101111111011110011111111000001111111111000111111'
        T_D[2]='11111110111111111111001111111111100011111111100000111111111011101111111111111011111111111110111111'+;
                '11111110111111111111101111111111111011111111111110111111111111101111111111111011111111111110111111'
        T_D[3]='11111000111111111000000111111110111110111111101111101111111111111011111111111110111111111111011111'+;
                '11111110011111111111001111111111100111111111110011111111111001111111111110000000111111000000001111'
        T_D[4]='11111000111111111100000111111110011100111111101111101111111111110111111111110011111111111100011111'+;
                '11111111101111111111111011111111111110111111101111101111111011110011111111000001111111111000111111'
        T_D[5]='11111111011111111111100111111111111001111111111100011111111110110111111111011101111111110111011111'+;
                '11101111011111110111110111111100000000011111000000000111111111110111111111111101111111111111011111'
        T_D[6]='11110000001111111100000011111111011111111111110111111111111000001111111110000001111111101111101111'+;
                '11111111101111111111111011111111111110111111101111101111111011110011111111000001111111111000111111'
        T_D[7]='11111000111111111100000111111110011110111111101111111111111011001111111110000001111111100111001111'+;
                '11101111101111111011111011111110111110111111101111101111111001111011111111000001111111111000111111'
        T_D[8]='11000000001111110000000011111111111100111111111111011111111111101111111111111011111111111101111111'+;
                '11111101111111111110011111111111101111111111111011111111111110111111111111101111111111110011111111'
        T_D[9]='11111000111111111100000111111110011100111111101111101111111011111011111110011100111111110000011111'+;
                '11110000011111111011111011111110111110111111101111101111111011111011111110000001111111111000111111'
        T_D[10]='11111000111111111100000111111110111100111111101111101111111011111011111110111110111111101111101111'+;
                '11101111001111111100000011111111100110111111111111101111111011110111111110000001111111111001111111'
        T_D[11]='11111111111111111111111111111111111111111111111111001111111111000011111111000001111111100111111111'+;
                '11100111111111111100000111111111110000111111111111001111111111111111111111111111111111111111111111'
        Dimension td[14]
        Store '' To td
        For i=1 To 14

            For k1=1 To 13
                zh=Val(Substr(BM+Alltrim(Str(JYM)),k1,1))+1
                td=td+Substr(T_D[zh],14*i-13,14)

            Endf
            td=td+Substr(T_D[11],14*i-13,14)
        Endf

        For i=1 To 7
            td='11'+Subs(td,1,14)+'11'+'001100'+Subs(td,15,84)+'1100110011'+Subs(td,99,84)+'001100'+Subs(td,183,14)+'11'
        Endf

        For i=8 To 14
            td='11'+Subs(td,1,14)+'11'+'111111'+Subs(td,15,84)+'1111111111'+Subs(td,99,84)+'111111'+Subs(td,183,14)+'11'

        Endf
        For i=1 To 14
            td=Strtran(td,'1',Chr(255)+Chr(255)+Chr(255))

            td=Strtran(td,'0',Chr(0)+Chr(0)+Chr(0))
        Endf
        st5=Chrt(Spac(224*4*3),' ',Chr(255))

        h=Fcreate(BM+Alltrim(Str(JYM))+'.bmp')
        =Fwrite(h,st1)
        =Fwrite(h,st5)
        For i=14 To 1 Step -1

            =Fwrite(h,td)
        Endf
        =Fwrite(h,st4)

        =Fwrite(h,st3)
        =Fwrite(h,st2)
        Fclose(h)
        Return BM+Alltrim(Str(JYM))+'.bmp'

    Endif
Endfunc
***调用示例***
thisform.image1.picture=EAN13('690102818039')

 网址: 行者孙原创空间 


最近后的内容
OLE 错误码 0x80040112: Class is not licensed for use
Downloads Visual FoxPro (VFP)
解决VFP的Textbox拖动问题
VFP 9.0 SP2 更新 6602
最近前的内容
.NET 示例 for Visual FoxPro
Microsoft Visual FoxPro 9.0 Service Pack 2 and "Sedna" - Beta
微软正式宣布不再有 VFP 10.0
VFP 读取网页内容
VFP基本命令
VFP基本函数
最受欢迎
微软正式宣布不再有 VFP 10.0
VFP基本命令
VFP基本函数
VFP 读取网页内容
.NET 示例 for Visual FoxPro
Microsoft Visual FoxPro 9.0 Service Pack 2 and "Sedna" - Beta
OLE 错误码 0x80040112: Class is not licensed for use
纯VFP实现EAN-13条码
VFP 9.0 SP2 更新 6602
Downloads Visual FoxPro (VFP)
解决VFP的Textbox拖动问题
 ©2005 - 2008 粤ICP备12037054号-1 用户登陆  |  互联说明  |  联系我们  |  网站地图