您现在的位置是:主页 > news > 网站的连接二维码怎么做/seo建站公司推荐

网站的连接二维码怎么做/seo建站公司推荐

admin2025/5/7 3:21:59news

简介网站的连接二维码怎么做,seo建站公司推荐,株洲人才网官网,怎么再各网站上做宣传我们都知道,条形码其实就是一大串的0101,存储了一个13位数字的信息,现在实现这么一个需求,根据用户输入的12位数字(第13位是校验位,可以根据前12位生成),转为条形码的01串,并画出来。先看编码规…

网站的连接二维码怎么做,seo建站公司推荐,株洲人才网官网,怎么再各网站上做宣传我们都知道,条形码其实就是一大串的0101,存储了一个13位数字的信息,现在实现这么一个需求,根据用户输入的12位数字(第13位是校验位,可以根据前12位生成),转为条形码的01串,并画出来。先看编码规…

我们都知道,条形码其实就是一大串的0101,存储了一个13位数字的信息,现在实现这么一个需求,根据用户输入的12位数字(第13位是校验位,可以根据前12位生成),转为条形码的01串,并画出来。

先看编码规则:https://baike.so.com/doc/2185319-2312258.html  百科里最下面这个例子讲的很清楚了。

自定义一个SurfaceView,只负责接收最终生成的Int集合并描绘出来。条形码里其实有三种rect,白色,黑色,以及黑色加长,分别用012表示。每个rect宽度取surfaceview宽度的百分之一(surfaceview宽度在surfaceCreated中获取),高度取宽度的40倍,加长的取45倍。还需要准备黑白两只画笔。

绘制代码://根据最终生成的数组画图

public void draw(List list){

Canvas canvas=holder.lockCanvas();

canvas.drawColor(Color.WHITE);

for (int i=0;i

int value=list.get(i);

drawOne(canvas,oneWidth*i,value);

}

holder.unlockCanvasAndPost(canvas);

}

//画一条竖线或空白

public void drawOne(Canvas canvas,int x,int value){

switch (value){

case 0:

canvas.drawRect(new Rect(x,0,x+oneWidth,1),paintWhite);

break;

case 1:

canvas.drawRect(new Rect(x,0,x+oneWidth,oneHeight),paintBlack);

break;

case 2:

canvas.drawRect(new Rect(x,0,x+oneWidth,oneLongHeight),paintBlack);

break;

}

}

然后在主界面放一个输入框和一个按钮,直接看点击事件,实际上就是算出整个01串的过程,存在result集合里,最后通知my(自定义surfaceview)绘制就可以了:public void handle(){

String s=et.getText().toString();

int length=s.length();

if (length!=12){

Toast.makeText(MainActivity.this,"格式有误",Toast.LENGTH_SHORT).show();

return;

}

int[] datas=new int[12];//输入的12位

for (int i=0;i

int a=s.charAt(i)-48;

datas[i]=a;

}

//奇数位和&&偶数位和

int p=datas[0]+datas[2]+datas[4]+datas[6]+datas[8]+datas[10];

int q=datas[1]+datas[3]+datas[5]+datas[7]+datas[9]+datas[11];

//校验位

int tes =10-((p+3*q)%10);

if (tes==10){

tes=0;

}

List result=new ArrayList<>();

for (int i=0;i<11;i++){

result.add(0);

}

result.add(2);result.add(0);result.add(2);

int[] left=front[datas[0]];

for (int i=0;i<6;i++){

int[] re;

if (left[i]==1){//A

re=A[datas[i+1]];

} else {//B

re=B[datas[i+1]];

}

for (Integer in:re){

result.add(in);

}

}

//中间分隔符

result.add(0);result.add(2);result.add(0);result.add(2);result.add(0);

for (int i=0;i<5;i++){

int []re=C[datas[i+7]];

for (Integer in:re){

result.add(in);

}

}

//校验位

int []re=C[tes];

for (Integer in:re){

result.add(in);

}

//结尾

result.add(2);result.add(0);result.add(2);

for (int i=0;i<7;i++){

result.add(0);

}

my.draw(result);

}

当然了,还需要定义好需要查的表:private final int[][] A={{0,0,0,1,1,0,1},{0,0,1,1,0,0,1},{0,0,1,0,0,1,1},{0,1,1,1,1,0,1},{0,1,0,0,0,1,1},

{0,1,1,0,0,0,1},{0,1,0,1,1,1,1},{0,1,1,1,0,1,1},{0,1,1,0,1,1,1},{0,0,0,1,0,1,1}};

private final int[][] B={{0,1,0,0,1,1,1},{0,1,1,0,0,1,1},{0,0,1,1,0,1,1},{0,1,0,0,0,0,1},{0,0,1,1,1,0,1},

{0,1,1,1,0,0,1},{0,0,0,0,1,0,1},{0,0,1,0,0,0,1},{0,0,0,1,0,0,1},{0,0,1,0,1,1,1}};

private final int[][] C={{1,1,1,0,0,1,0},{1,1,0,0,1,1,0},{1,1,0,1,1,0,0},{1,0,0,0,0,1,0},{1,0,1,1,1,0,0},

{1,0,0,1,1,1,0},{1,0,1,0,0,0,0},{1,0,0,0,1,0,0},{1,0,0,1,0,0,0},{1,1,1,0,1,0,0}};

//前置码

private final int[][] front={{1,1,1,1,1,1},{1,1,2,1,2,2},{1,1,2,2,1,2},{1,1,2,2,2,1},{1,2,1,1,2,2},

{1,2,2,1,1,2},{1,2,2,2,1,1},{1,2,1,2,1,2},{1,2,1,2,2,1},{1,2,2,1,2,1}};