رمز الاستجابة السريعة عبارة عن صورة باركود تستخدم الأشكال الهندسية ذات المستوى الأسود والأبيض لتسجيل النص والصور وعناوين URL وغيرها من المعلومات من خلال خوارزميات الترميز المقابلة. الرقم التالي
ميزات رمز الاستجابة السريعة:
1. الترميز عالي الكثافة ، قدرة معلومات كبيرة
يمكن أن تستوعب ما يصل إلى 1850 رسائل رأس المال أو 2710 أرقام أو 1108 بايت ، أو أكثر من 500 حرف صيني ، وهو ما يقرب من عشرات المرات أعلى من معلومات الباركود العادية.
2. نطاق تشفير واسع
يمكن لهذا الباركود أن يشفر معلومات رقمية مثل الصور والأصوات والنصوص والتوقيعات وبصمات الأصابع ، وما إلى ذلك ، والتعبير عنها في الرموز الباركية ؛ يمكن أن تمثل النص بلغات متعددة ؛ ويمكن أن تمثل بيانات الصورة.
3. وظيفة تحمل الخطأ وتصحيح الخطأ
يسمح ذلك بتلف الباركود ثنائي الأبعاد بشكل صحيح بسبب الثقب ، والتشويه ، وما إلى ذلك ، ولا يزال من الممكن استرداد المعلومات إذا وصلت منطقة الضرر إلى 50 ٪.
4.
إنه أقل بكثير من معدل الخطأ في فك تشفير الباركود العادي لأجبرتين لكل مليون ، ومعدل الخطأ لا يزيد عن أطراف لكل مليون.
5. يمكن تقديم تدابير التشفير
السرية الجيدة ومكافحة التزوير.
6. التكلفة المنخفضة ، من السهل صنعها ، متينة
بسبب الخصائص المذكورة أعلاه ، أصبحت رموز QR أكثر شعبية وتستخدم على نطاق أوسع (انظر موسوعة Baidu للحصول على التفاصيل ، فإن المقدمة ليست محور هذه المقالة). لذلك ، فإن إتقان كيفية تطوير رموز QR هو احتياطي جيد للغاية. لذلك ، ستشرح لك هذه المقالة كيفية إنشاء وتحليل رموز QR.
1. جافا
حزمة جرة مطلوبة: qrcode.jar
http://sourceforge.jp/projects/qrcode/
فئة TwoDimensionCode: فئة تشغيل رمز الاستجابة السريعة
Package qrcode ؛ import java.awt.color ؛ import java.awt.graphics2d ؛ import java.awt.image.bufferedimage ؛ import java.io jp.sourceforge.qrcode.qrcodedecoder ؛ استيراد jp.sourceforge.qrcode.exception.decodingFailedException ؛ استيراد com.swetake.util.qrcode EncoderQrCode (محتوى السلسلة ، السلسلة imgpath) {this.encoderQrCode (المحتوى ، imgpath ، "png" ، 7) ؛ } / *** إنشاء رمز QR (QRCode) الصورة* param محتوى المحتوى مخزن* param إخراج دفق* / public void EncoderQrcode (محتوى السلسلة ، إخراج outputStream) {this.encoderqrcode (المحتوى ، الإخراج ، "PNG" ، 7) ؛ } / *** إنشاء رمز QR (qrcode) صورة* param محتوى المحتوى المحتوى* param imgpath picture* param imgtype type* / public void encoderqrcode (string content ، string imgpath ، string imgtype) {this.encoderqrcode (content ، imgtype ، 7) ؛ } / *** إنشاء رمز QR (QRCode) الصورة* param محتوى المحتوى محتوى مخزن* param دفق إخراج الإخراج* param imgtype نوع الصورة* / public void encoderqrcode (محتوى السلسلة ، إخراج outputStream ، سلسلة imgtype) } / *** إنشاء رمز QR (qrcode) صورة* param محتوى المحتوى محتوى مخزن* param imgpath picture path* param imgtype type* size size QR code size* / public void encoderqrcode (string content ، string imgpath ، string imgtype ، int size) مقاس)؛ ملف imgfile = ملف جديد (imgpath) ؛ // إنشاء رمز QR qrcode imageio.write (bufimg ، imgtype ، imgfile) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} / *** إنشاء رمز QR (qrcode) صورة* param محتوى المحتوى محتوى مخزن المحتوى* param دفق إخراج الإخراج* param imgtype نوع الصورة* param حجم رمز QR* / public void EncoderQrcod مقاس)؛ // إنشاء رمز QR QRCode Imageio.write (bufimg ، imgtype ، الإخراج) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} / *** الطريقة العامة لإنشاء رمز QR (qrcode) الصور* param محتوى المحتوى المحتوى* param imgtype نوع الصورة* size size size QR size* / regeredimage qrcodecommon (محتوى سلسلة ، string imgtype ، int size) {bufferedimage bufimg = null ؛ حاول {qrcode qrcodehandler = new qrcode () ؛ // قم بتعيين معدل خطأ رمز الاستجابة السريعة ، والذي يمكن تحديده كـ L (7 ٪) و M (15 ٪) و Q (25 ٪) و H (30 ٪). كلما ارتفع معدل الخطأ ، يمكن تخزين المعلومات أقل ، ولكن كلما كان متطلبات رمز QR Clarity QRCodeHandler.SetQRcodeerRorCorrect ('m') ؛ qrcodehandler.setqrcodeencodeMode ('b') ؛ // اضبط حجم رمز الاستجابة السريعة ، مع نطاق قيمة 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 (color.white) ؛ Gs.ClearRect (0 ، 0 ، imgsize ، imgsize) ؛ // تعيين لون الصورة> الأسود gs.setColor (color.black) ؛ . // إخراج محتوى> رمز QR if (contentBytes.length> 0 && contentBytes.length <800) {boolean [] [] codeout = qrcodehandler.calqrcode (contentBytes) ؛ لـ (int i = 0 ؛ i <codeout.length ؛ i ++) {for (int j = 0 ؛ j <codeout.length ؛ j ++) {if (codeout [j] [i]) {gs.fillRect (j * 3+pixoff ، i * 3+pixoff ، 3 ، 3) ؛ }}}} آخر {رمي استثناء جديد ("qrcode content bytes length =" + contentBytes.length + "not in [0 ، 800].") ؛ } gs.dispose () ؛ bufimg.flush () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } إرجاع bufimg ؛ } / ** * تحليل رمز QR (qrcode) * param imgpath path * regurn * / public string decoderqrcode (string imgpath) {// qrcode qr code file file imagefile = new file (imgpath) ؛ BufferedImage bufimg = null ؛ محتوى السلسلة = فارغ ؛ حاول {bufimg = imageio.read (imageFile) ؛ QRCODEDECODER DECODER = QRCODEDECODER () جديد ؛ content = new string (decoder.decode (new twoDimensionCodeimage (bufimg)) ، "utf-8") ؛ } catch (ioException e) {system.out.println ("error:" + E.GetMessage ()) ؛ E.PrintStackTrace () ؛ } catch (decodingFailedException dfe) {system.out.println ("error:" + dfe.getMessage ()) ؛ dfe.printstacktrace () ؛ } إرجاع المحتوى ؛ } / ** * تحليل رمز QR (qrcode) * param دفق إدخال الإدخال * @REGARN * / decoderQrCode (inputStream input) {bufferedImage bufimg = null ؛ محتوى السلسلة = فارغ ؛ حاول {bufimg = imageio.read (input) ؛ QRCODEDECODER DECODER = QRCODEDECODER () جديد ؛ content = new string (decoder.decode (new twoDimensionCodeimage (bufimg)) ، "utf-8") ؛ } catch (ioException e) {system.out.println ("error:" + E.GetMessage ()) ؛ E.PrintStackTrace () ؛ } catch (decodingFailedException dfe) {system.out.println ("error:" + dfe.getMessage ()) ؛ dfe.printstacktrace () ؛ } إرجاع المحتوى ؛ } الفراغ الثابت العام (سلسلة [] args) {string imgpath = "g: /tddownload/michael_qrcode.png" ؛ String encodercontent = "Hello Big ، Small ، مرحبًا بك في QRCode!" + "/nmyblog [http://sjsky.iteye.com]" + "/nemail [[email protected]]" ؛ TwodimensionCode Handler = جديد twodimensionCode () ؛ Handler.encoderQrCode (EncoderContent ، IMGPath ، "PNG") ؛ // جرب {// OutderStream Output = new FileOutputStream (imgpath) ؛ // handler.encoderqrcode (المحتوى ، الإخراج) ؛ System.out.println ("============== Encoder Success") ؛ string decodercontent = handler.decoderqrcode (imgpath) ؛ System.out.println ("نتيجة التحليل هي كما يلي:") ؛ system.out.println (decoderContent) ؛ System.out.println ("============== Decoder Success !!!") ؛ }}فئة TwoDimensionCodeImage: كائن رمز QR
حزمة qrcode ؛ import java.awt.image.bufferedImage ؛ استيراد jp.sourceforge.qrcode.data.qrcodeimage ؛ الطبقة العامة twodimensioncodeimage تنفذ qrcodeimage {bufferedimage bufimg ؛ public twodimensionCodeImage (bufferedImage bufimg) {this.bufimg = bufimg ؛ } Override public int getheight () {return bufimg.getheight () ؛ } Override public int getPixel (int x ، int y) {return bufimg.getrgb (x ، y) ؛ } Override public int getWidth () {return bufimg.getWidth () ؛ }}ما سبق هو معلومات توليد وتحليل رموز Java QR. سوف نستمر في إضافتها لاحقًا. شكرا لدعمكم لهذا الموقع!