⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qrcode.rb

📁 在线生成手机二维码的源程序
💻 RB
📖 第 1 页 / 共 2 页
字号:
#!/usr/local/bin/ruby## QRcode class library for ruby version 0.50beta6  (c)2002-2004 Y.Swetake##class Qrcodedef initialize    @path="./qrcode_data"    @qrcode_error_correct="M"    @qrcode_version=0    @qrcode_structureappend_n=0    @qrcode_structureappend_m=0    @qrcode_structureappend_parity=""    @qrcode_structureappend_originaldata=""enddef string_bit_cal(s1,s2,ind)p "s1 : "p s1.unpack("C*") if s1.length>s2.length then   s3=s1   s1=s2   s2=s3 end i=0 res="" left_length=s2.length-s1.length case ind when "xor"    s1.each_byte{|b|        res+=(b ^ s2[i]).chr        i+=1    }    res+=s2[s1.length,left_length] when "or"    s1.each_byte{|b|       res+=(b | s2[i]).chr       i+=1    }    res+=s2[s1.length,left_length] when "and"    s1.each_byte{|b|       res+=(b & s2[i]).chr       i+=1       }       res+=0.chr * left_length    end#p res.unpack("C*");#exit;    return(res)enddef string_bit_not(s1)    res=""    s1.each_byte{|b| res+=(256 + ~b).chr}    return(res)enddef set_qrcode_version(z)    if (z>=0 && z<=40) then        @qrcode_version=z    endenddef set_qrcode_error_correct(z)    @qrcode_error_correct=zenddef get_qrcode_version()    return @qrcode_versionenddef set_structureappend(m,n,p)    if (n>1 && n<=16 && m>0 && m<=16 && p>=0 && p<=255) then        @qrcode_structureappend_m=m        @qrcode_structureappend_n=n        @qrcode_structureappend_parity=p    endenddef cal_structureappend_parity(originaldata)    if (originaldata.length>1) then        structureappend_parity=0        originaldata.each_byte{|b| structureappend_parity^=b}        return structureappend_parity    endenddef make_qrcode(qrcode_data_string)    data_length=qrcode_data_string.length    if (data_length<=0) then       raise "Data do not exist"       return 0    end    data_counter=0    data_value=Array.new    data_bits=Array.new    if (@qrcode_structureappend_n > 1) then        data_value[0]=3        data_bits[0]=4        data_value[1]=@qrcode_structureappend_m-1        data_bits[1]=4        data_value[2]=@qrcode_structureappend_n-1        data_bits[2]=4        data_value[3]=@qrcode_structureappend_parity        data_bits[3]=8        data_counter=4    end    data_bits[data_counter]=4#  --- determine encode mode    if (qrcode_data_string[/[^0-9]/]) then        if (qrcode_data_string[/[^0-9A-Z \$\*\%\+\-\.\/\:]/]) then# --- 8bit byte mode #p qrcode_data_string.unpack("H*")#exit    codeword_num_plus=Array[0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]            data_value[data_counter]=4            data_counter+=1            data_value[data_counter]=data_length            data_bits[data_counter]=8            codeword_num_counter_value=data_counter            data_counter+=1            i=0            while i<data_length                data_value[data_counter]=qrcode_data_string[i]                data_bits[data_counter]=8                data_counter+=1                i+=1            endp data_valueexit        else# ---- alphanumeric mode            codeword_num_plus=Array[0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4]            data_value[data_counter]=2            data_counter+=1            data_value[data_counter]=data_length            data_bits[data_counter]=9            codeword_num_counter_value=data_counter            alphanumeric_character_hash=Hash["0"=>0,"1"=>1,"2"=>2,"3"=>3,"4"=>4,"5"=>5,"6"=>6,"7"=>7,"8"=>8,"9"=>9,"A"=>10,"B"=>11,"C"=>12,"D"=>13,"E"=>14,"F"=>15,"G"=>16,"H"=>17,"I"=>18,"J"=>19,"K"=>20,"L"=>21,"M"=>22,"N"=>23,"O"=>24,"P"=>25,"Q"=>26,"R"=>27,"S"=>28,"T"=>29,"U"=>30,"V"=>31,"W"=>32,"X"=>33,"Y"=>34,"Z"=>35," "=>36,"\$"=>37,"\%"=>38,"\*"=>39,"\+"=>40,"\-"=>41,"\."=>42,"\/"=>43,"\:"=>44]            i=0            data_counter+=1            while i<data_length                if (i % 2) ==0 then                    data_value[data_counter]=alphanumeric_character_hash[qrcode_data_string[i,1]]                    data_bits[data_counter]=6                else                    data_value[data_counter]=data_value[data_counter]*45+alphanumeric_character_hash[qrcode_data_string[i,1]]                    data_bits[data_counter]=11                    data_counter+=1                end                i+=1            end        end    else# ---- numeric mode        codeword_num_plus=Array[0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4]        data_value[data_counter]=1        data_counter+=1        data_value[data_counter]=data_length        data_bits[data_counter]=10        codeword_num_counter_value=data_counter        i=0        data_counter+=1        while  i<data_length            if ((i % 3)==0) then                data_value[data_counter]=qrcode_data_string[i,1].to_i                data_bits[data_counter]=4            else                data_value[data_counter]=data_value[data_counter]*10+qrcode_data_string[i,1].to_i                if ((i % 3)==1) then                    data_bits[data_counter]=7                else                    data_bits[data_counter]=10                    data_counter+=1                end            end            i+=1        end    end    if data_bits[data_counter].nil? then     elsif data_bits[data_counter]>0 then         data_counter+=1    end    i=0    total_data_bits=0    while i<data_counter        total_data_bits+=data_bits[i]        i+=1    end    ecc_character_hash=Hash["L"=>1,"l"=>1,"M"=>0,"m"=>0,"Q"=>3,"q"=>3,"H"=>2,"h"=>2]    ec=ecc_character_hash[@qrcode_error_correct]    ec=0 if (!ec)    max_data_bits_array=Array[0,128,224,352,512,688,864,992,1232,1456,1728,2032,2320,2672,2920,3320,3624,4056,4504,5016,5352,5712,6256,6880,7312,8000,8496,9024,9544,10136,10984,11640,12328,13048,13800,14496,15312,15936,16816,17728,18672,152,272,440,640,864,1088,1248,1552,1856,2192,2592,2960,3424,3688,4184,4712,5176,5768,6360,6888,7456,8048,8752,9392,10208,10960,11744,12248,13048,13880,14744,15640,16568,17528,18448,19472,20528,21616,22496,23648,72,128,208,288,368,480,528,688,800,976,1120,1264,1440,1576,1784,2024,2264,2504,2728,3080,3248,3536,3712,4112,4304,4768,5024,5288,5608,5960,6344,6760,7208,7688,7888,8432,8768,9136,9776,10208,104,176,272,384,496,608,704,880,1056,1232,1440,1648,1952,2088,2360,2600,2936,3176,3560,3880,4096,4544,4912,5312,5744,6032,6464,6968,7288,7880,8264,8920,9368,9848,10288,10832,11408,12016,12656,13328]    if (@qrcode_version==0) then#--- auto version select        i=1+40*ec        j=i+39        @qrcode_version=1        while i<=j            if ((max_data_bits_array[i])>=total_data_bits+codeword_num_plus[@qrcode_version]) then                max_data_bits=max_data_bits_array[i]                break            end            i+=1            @qrcode_version+=1        end    else        max_data_bits=max_data_bits_array[@qrcode_version+40*ec]    end    total_data_bits+=codeword_num_plus[@qrcode_version]    data_bits[codeword_num_counter_value]+=codeword_num_plus[@qrcode_version]    max_codewords_array=Array[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706]    max_codewords=max_codewords_array[@qrcode_version]    max_modules_1side=17+(@qrcode_version << 2)    matrix_remain_bit=Array[0,0,7,7,7,7,7,0,0,0,0,0,0,0,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,0,0,0,0,0,0]#/* ---- read version ECC data file */    byte_num=matrix_remain_bit[@qrcode_version]+(max_codewords << 3)    filename=@path+"/qrv"+@qrcode_version.to_s+"_"+ec.to_s+".dat"p filename    fp = File.open(filename ,"rb")        matx=fp.read(byte_num)        maty=fp.read(byte_num)        masks=fp.read(byte_num)        fi_x=fp.read(15)        fi_y=fp.read(15)        rs_ecc_codewords=fp.read(1).unpack("C")[0]        rso=fp.read(128)    fp.close    matrix_x_array=matx.unpack("C*")    matrix_y_array=maty.unpack("C*")    mask_array=masks.unpack("C*")    rs_block_order=rso.unpack("C*")    format_information_x2=fi_x.unpack("C*")    format_information_y2=fi_y.unpack("C*")p [matrix_x_array,matrix_y_array]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -