一段时间前,一家商店报纸在1号收银台扫描代码,商品显示在2号收银台,问他们是否拿错了代码扫描枪,坚持不,说是我们开发的POS系统有BUG,我Review在前端和后端代码之后,我无法理解如此简单的接口调用会有问题。从计算机通信理论的角度来看,哪台机器的请求响应肯定会回到哪台机器,后来让他们拍照扫码枪的连接,看到原来用的是无线扫码枪,但是电源线连接到电脑USB嘴,他们肯定会告诉我是有线连接扫码枪,不会错,因为现在扫码枪是即插即用的,技术没有太多关注,找不到京东假装是买家咨询客户服务,客户服务说这种情况串码,需要重新设置,好吧,先说条形码和扫码枪。
条形码,英语barcode,是全球产品的身份标记代码GS1.不同国家根据自身情况制定标准,中国商品编码中心制定国家标准。
条形码有100多种编码类型,以下两种是我们系统现在使用的编码
- ENA-13: 全球通用商品条码,长度13位,字符集0-9。
- Code-128编码:长度无限,字符集ASCII码。
我厂在开发新产品时会申请条形码,然后澳大利亚通过条形码向国内工厂发起采购需求。生产后,工厂会将条形码贴在产品上,然后打包托盘,将托盘放入集装箱,通过海运到达澳大利亚中转仓库,最后送到各店收货、上架、销售。整个过程依赖于条形码,现在大约有10000种商品。以下是商品条形码,使用的编码格式是ENA-13.
此外,我们在销售商品时会打印收据,收据上也有条形码,主要是为了方便客户下次退货和交换,这使用Code-128。
Java条形码生成有开源库Barcode4j Barcode4j支持Code-39、Code-128、EAN-13等编码格式,它在Canvas画条形码生成图片,然后将图片嵌入收据中。
/** * 生成条形码 * * @param barCode * 条形码 * @return 图片文件名 ,使用时带上网站 */ public static String generateBarCode(String barCode) { String fileName = null; if (StringUtils.isEmpty(barCode)) { return null; } FileOutputStream out = null; // 如果你想要其他类型的条码(CODE 39, EAN-8...)直接获取相关对象Code39Bean... Code128Bean bean = new Code128Bean(); // 分辨率:条码越大,值越长,分辨率越高 final int dpi = 512; // 设置两侧是否有空白 bean.doQuietZone(true); final double modouleWidth = UnitConv.in2mm(3.0f / dpi); bean.setModuleWidth(modouleWidth); bean.setBarHeight(5); // bean.setFontSize(3); // bean.setHeight(6); // 设置文本位置(包括是否显示) bean.setMsgPosition(HumanReadablePlacement.HRP_BOTTOM); // 设置图片类型 String format = "image/png"; try { fileName = Constants.BAR_CODE_ABS_PATH barCode ".png"; File file = new File(fileName); out = new FileOutputStream(file); // 输出到流 BitmapCanvasProvider canvas = new BitmapCanvasProvider(out, format, dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0); // 生成条形码 bean.generateBarcode(canvas, barCode); // 结束绘制 canvas.finish(); } catch (IOException e) { e.printStackTrace(); return null; } finally { if (out != null) try { out.close(); } catch (IOException e) { e.printStackTrace(); } } return fileName; }
今天,我们突然发现,我们生成的所有条码图片都被放置了Linux目录下,目录层次没有拆分,现在一个目录下有几十万张图片,真的晕倒了。
一般采用扫码枪CIS技术,CIS采用内置发光二极管照明读取图像数据的接触式传感数据,一般分辨率为200~600dpi.
扫码枪分为有线和无线,现在一般用有线。USB接口、无线蓝牙和无线433协议,我们使用无线433扫描枪,它有一个接收器连接到计算机接收数据,一般接收器可以同时接收多个扫描枪,我们每个收银员配置一对,由于配置问题,1收银员扫描枪扫描数据被2收银员接收,然后商品数据就显示在2号收银台。