รหัส QR เป็นรูปภาพบาร์โค้ดที่ใช้ตัวเลขเรขาคณิตระนาบขาวดำเพื่อบันทึกข้อความรูปภาพ URL และข้อมูลอื่น ๆ ผ่านอัลกอริทึมการเข้ารหัสที่สอดคล้องกัน รูปต่อไปนี้
คุณสมบัติของรหัส QR:
1. การเข้ารหัสความหนาแน่นสูงความจุข้อมูลขนาดใหญ่
สามารถรองรับตัวอักษรได้สูงสุด 1850 ตัวอักษรหรือ 2710 ตัวเลขหรือ 1108 ไบต์หรือมากกว่า 500 ตัวอักษรจีนซึ่งสูงกว่าข้อมูลบาร์โค้ดทั่วไปหลายครั้ง
2. ช่วงการเข้ารหัสกว้าง
บาร์โค้ดนี้สามารถเข้ารหัสข้อมูลดิจิทัลเช่นรูปภาพเสียงข้อความลายเซ็นลายนิ้วมือ ฯลฯ และแสดงในบาร์โค้ด พวกเขาสามารถแสดงข้อความได้หลายภาษา และพวกเขาสามารถแสดงข้อมูลภาพ
3. ความทนทานต่อความผิดพลาดที่แข็งแกร่งและฟังก์ชั่นการแก้ไขข้อผิดพลาด
สิ่งนี้จะช่วยให้บาร์โค้ดสองมิติได้รับความเสียหายอย่างเหมาะสมเนื่องจากการเจาะทะลุภาวะซึมเศร้า ฯลฯ และข้อมูลยังคงสามารถกู้คืนได้หากพื้นที่ความเสียหายสูงถึง 50%
4. ความน่าเชื่อถือในการถอดรหัสสูง
มันต่ำกว่าอัตราความผิดพลาดของการถอดรหัสบาร์โค้ดทั่วไปของสองฝ่ายต่อล้านและอัตราความผิดพลาดไม่เกินหนึ่งฝ่ายต่อล้าน
5. สามารถแนะนำมาตรการการเข้ารหัส
การรักษาความลับที่ดีและต่อต้านการปลอมแปลง
6. ต้นทุนต่ำทำง่ายและทนทาน
เนื่องจากลักษณะข้างต้นรหัส QR จึงได้รับความนิยมมากขึ้นเรื่อย ๆ และมีการใช้กันอย่างแพร่หลายมากขึ้น (ดูรายละเอียดสารานุกรม Baidu สำหรับรายละเอียดการแนะนำไม่ได้เป็นจุดสนใจของบทความนี้) ดังนั้นการเรียนรู้วิธีการพัฒนารหัส QR จึงเป็นความรู้ที่ดีมาก ดังนั้นบทความนี้จะอธิบายถึงวิธีการสร้างและวิเคราะห์รหัส QR
1. Java
แพ็คเกจ jar ที่จำเป็น: qrcode.jar
http://sourceforge.jp/projects/qrcode/
TwodimensionCode Class: QR รหัสการทำงาน
แพ็คเกจ qrcode; นำเข้า java.awt.color; นำเข้า java.awt.graphics2d นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.io.inputstream; jp.sourceforge.qrcode.qrcodeDecoder; นำเข้า JP.SourceForge.qrcode.exception.decodingFaileDexception; นำเข้า com.swetake.util.qrcode; คลาสสาธารณะ TwodimensionCode { / *** encoderQrCode (เนื้อหาสตริง, string imgPath) {this.encoderqrCode (เนื้อหา, imgpath, "png", 7); } / *** สร้างรหัส QR (qRCode) รูปภาพ* @param เนื้อหาจัดเก็บเนื้อหา* @param เอาต์พุตเอาต์พุตเอาต์พุต* / โมฆะสาธารณะ encoderQrCode (เนื้อหาสตริงเอาต์พุตเอาท์พุทเอาท์พุท) {this.encoderQrCode (เนื้อหา, เอาต์พุต, "png", 7); } / *** สร้างรหัส QR (QRCODE) รูปภาพ* @Param Content Store Content* @param Imgpath Picture Path* @param imgtype ประเภทรูปภาพ* / โมฆะสาธารณะ encoderqrCode (เนื้อหาสตริง, imgpath, imgType) {this.EncoderqRcode } / *** สร้างรหัส QR (QRCODE) รูปภาพ* @Param Content Store Content* @Param เอาต์พุตเอาต์พุตออก* @param imgtype ประเภทภาพ* / โมฆะสาธารณะ encoderQrCode (เนื้อหาสตริงเอาต์พุตเอาท์พุทสตริง imgType) {this.encoderqrcode } / *** สร้างรหัส QR (QRCODE) ภาพ* @Param Content Store Content* @Param Imgpath Picture Path* @param Imgtype ประเภทภาพ* @param ขนาด QR รหัสขนาด* / โมฆะสาธารณะ encoderQrCode ขนาด); ไฟล์ imgfile = ไฟล์ใหม่ (imgpath); // สร้างรหัส QR QRCode Imageio.write (bufimg, imgtype, imgfile); } catch (exception e) {e.printstacktrace (); }} / *** สร้างรหัส QR (QRCODE) รูปภาพ* @Param Content Store Content* @Param เอาต์พุตเอาท์พุทออก* @param imgtype ประเภทภาพ* @param ขนาดรหัส QR ขนาด* / โมฆะสาธารณะ encoderQrCode (เนื้อหาสตริง imgtype, ขนาด); // สร้างรหัส QR QRCODE IMAGEATIO.WRITE (BUFIMG, IMGTYPE, เอาต์พุต); } catch (exception e) {e.printstacktrace (); }} / *** วิธีการสาธารณะในการสร้างรหัส QR (qRCode) รูปภาพ* @param เนื้อหาจัดเก็บเนื้อหา* @param imgtype ประเภทรูปภาพ* @param ขนาด QR รหัสขนาด* @return* / private bufferedImage qRCodeCommon (เนื้อหาสตริง ลอง {qrcode qrCodeHandler = new QRCode (); // ตั้งค่าอัตราความผิดพลาดของรหัส QR ซึ่งสามารถเลือกได้เป็น L (7%), M (15%), Q (25%) และ H (30%) ยิ่งอัตราความผิดพลาดสูงขึ้นเท่าใดข้อมูลที่น้อยก็สามารถเก็บไว้ได้ แต่ความต้องการของรหัส QR ที่ชัดเจนขึ้น qrcodeHandler.setqrcodeerRorcorrect ('m'); qrCodeHandler.SetQrCodeEncodeMode ('B'); // ตั้งค่าขนาดรหัส QR ด้วยช่วงค่า 1-40 ค่าที่ใหญ่ขึ้นยิ่งขนาดใหญ่ขึ้นข้อมูลที่คุณสามารถเก็บ qrcodeHandler.setqrcodeversion (ขนาด) ได้มากขึ้นเท่านั้น // รับอาร์เรย์ไบต์ของเนื้อหาและตั้งค่ารูปแบบการเข้ารหัสไบต์ [] contentBytes = content.getBytes ("UTF-8"); // ขนาดภาพ int imgsize = 67 + 12 * (ขนาด - 1); bufimg = bufferedimage ใหม่ (imgsize, imgsize, bufferedimage.type_int_rgb); graphics2d gs = bufimg.createGraphics (); // ตั้งค่าพื้นหลังสี gs.setbackground (สีขาว); gs.clearrect (0, 0, imgsize, imgsize); // ตั้งค่าสีภาพ> สีดำ gs.setcolor (color.black); // ตั้งค่าชดเชยการไม่ตั้งค่าอาจทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์ int pixoff = 2; // เนื้อหาเอาต์พุต> รหัส QR ถ้า (contentByTes.Length> 0 && contentBytes.Length <800) {boolean [] [] codeOut = qrCodeHandler.CalqRCode (contentBytes); สำหรับ (int i = 0; i <codeout.length; i ++) {สำหรับ (int j = 0; j <codeout.length; j ++) {ถ้า (codeout [j] [i]) {gs.fillrect (j * 3+pixoff, i * 3+pixoff, 3, 3); }}}} else {โยนข้อยกเว้นใหม่ ("qrcode เนื้อหาไบต์ความยาว =" + contentBytes.length + "ไม่ได้อยู่ใน [0, 800]"); } gs.dispose (); bufimg.flush (); } catch (exception e) {e.printstacktrace (); } ส่งคืน bufimg; } / ** * วิเคราะห์รหัส QR (qRCode) * @param imgpath Path Path * @return * / Public String DecoderQrCode (String imgPath) {// QRCODE QR รหัสภาพไฟล์ไฟล์ไฟล์ภาพ = ไฟล์ใหม่ (IMGPATH); bufferedImage bufimg = null; เนื้อหาสตริง = null; ลอง {bufimg = imageio.read (imagefile); qRCodeDecoder decoder = ใหม่ qRCodeDecoder (); content = สตริงใหม่ (decoder.decode (ใหม่ twodimensionCodeImage (bufimg)), "UTF-8"); } catch (ioexception e) {system.out.println ("ข้อผิดพลาด:" + e.getMessage ()); E.PrintStackTrace (); } catch (decodingFaileDexception dfe) {system.out.println ("ข้อผิดพลาด:" + dfe.getMessage ()); dfe.printstacktrace (); } ส่งคืนเนื้อหา; } / ** * การแยกวิเคราะห์รหัส QR (qRCode) * @Param อินพุตสตรีมอินพุต * @return * / สตริงสาธารณะ DecoderQrCode (อินพุตอินพุต) {bufferedImage bufimg = null; เนื้อหาสตริง = null; ลอง {bufimg = imageio.read (อินพุต); qRCodeDecoder decoder = ใหม่ qRCodeDecoder (); content = สตริงใหม่ (decoder.decode (ใหม่ twodimensionCodeImage (bufimg)), "UTF-8"); } catch (ioexception e) {system.out.println ("ข้อผิดพลาด:" + e.getMessage ()); E.PrintStackTrace (); } catch (decodingFaileDexception dfe) {system.out.println ("ข้อผิดพลาด:" + dfe.getMessage ()); dfe.printstacktrace (); } ส่งคืนเนื้อหา; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {string imgpath = "g: /tddownload/michael_qrcode.png"; String encoderContent = "สวัสดีใหญ่ขนาดเล็กยินดีต้อนรับสู่ qrcode!" + "/nmyblog [http://sjsky.iteye.com]" + "/nemail [[email protected]]"; TwodimensionCode Handler = New TwodimensionCode (); handler.encoderqrCode (encoderContent, imgPath, "png"); // ลอง {// outputstream output = ใหม่ fileOutputStream (imgPath); // handler.encoderqrcode (เนื้อหา, เอาต์พุต); System.out.println ("============== ความสำเร็จของเข้ารหัส"); สตริง decodercontent = handler.decoderqrCode (imgPath); System.out.println ("ผลการแยกวิเคราะห์มีดังนี้:"); System.out.println (decodercontent); System.out.println ("============= ความสำเร็จของตัวถอดรหัส !!!"); -TwodimensionCodeImage คลาส: QR Code Image Object
แพ็คเกจ qrcode; นำเข้า java.awt.image.bufferedimage; นำเข้า jp.sourceforge.qrcode.data.qrcodeimage; คลาสสาธารณะ TwodimensionCodeImage ใช้ qrcodeimage {bufferedimage bufimg; สาธารณะ twodimensionCodeImage (bufferedImage bufimg) {this.bufimg = bufimg; } @Override สาธารณะ int getheight () {return bufimg.getheight (); } @Override สาธารณะ int getPixel (int x, int y) {return bufimg.getRgb (x, y); } @Override สาธารณะ int getWidth () {return bufimg.getWidth (); -ข้างต้นเป็นการรวบรวมข้อมูลเกี่ยวกับการสร้างและการวิเคราะห์รหัส Java QR เราจะเพิ่มในภายหลัง ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!