מחולל קודי QR

יצירת קוד QR עם ההחלטות שמאחוריו: פילוח המצבים, הגרסה, רמת תיקון השגיאות, ניקוד שמונה המסכות, ומה לוגו במרכז באמת עולה.

תוכן
מה בעצם מקודד
https://seladevtools.com/qr-code-generator
הקוד

גרסה 3 · 29×29 מודולים · רמה M · מסכה 7

אפשרויות
תיקון שגיאות
צבעים
לוגו
מה המקודד החליט
גרסה
3 · 29×29 מודולים
רמה
M
מסכה
7 (העונש הנמוך ביותר)
נתונים
348 מתוך 352 ביט
קודמילים
44 נתונים + 26 תיקון, ב-1 בלוקים

מקטעים

מצבתוויםביטים
byte42348

עונשי המסכות

מסכהרצפיםבלוקיםדמויות-איתוראיזוןסה״כ
03253511200796
13313752800986
22943452800919
33223451600827
43303301200780
53123481600820
63223513200993
72892731600722

ארבעת הכללים מענישים רצפים ארוכים בצבע אחד, בלוקים של 2×2, את התבנית 1:1:3:1:1 שסורק מתבלבל בינה לבין תבנית איתור, ויחס כהים הרחוק ממחצית. הנמוך מנצח; לחיצה על שורה כופה מסכה.

בתוך כל קוד QR מסתתרות ארבע החלטות

מדביקים טקסט במחולל QR ויוצא ריבוע בשחור-לבן. מה שלא מראים לך הוא שהמקודד בדיוק קיבל בשמך ארבע החלטות נפרדות, שכל אחת מהן משנה את התוצאה, וכל אחת מהן יכלה להתקבל אחרת.

הכלי הזה מציג את כל הארבע, כי הן החלק המעניין. ברגע שרואים אותן, ההתנהגות שנראית שרירותית — הקוד קופץ בגודל כשמוסיפים תו אחד, לוגו שעובד בקוד אחד ולא בזה שאחריו — מפסיקה להיות שרירותית.

  • פילוח המצבים: התקן מגדיר ארבע דרכים לארוז תווים, והטקסט שלך מתחלק ביניהן.
  • הגרסה: מספר בין 1 ל-40 שקובע את הרשת בין 21×21 ל-177×177 מודולים.
  • רמת תיקון השגיאות: L, M, Q או H, שקובעת כמה מהסמל יכול להיהרס ועדיין להיקרא.
  • המסכה: אחת משמונה תבניות שמוחלות ב-XOR מעל הנתונים כדי לפרק צורות שמבלבלות סורק.

אף אחת מהארבע אינה עניין של העדפה. לכל אחת יש תשובה נכונה בהינתן האחרות, וזה בדיוק מה שהופך אותן לשוות מעקב: הן משפיעות זו על זו.

פיצול הטקסט הוא בעיית מסלול קצר ביותר

המצב הנומרי מוציא 10 ביט על כל שלוש ספרות. המצב האלפא-נומרי מוציא 11 ביט על כל שני תווים, מתוך קבוצה של 45: הספרות, האותיות הגדולות, הרווח ותשעה סימני פיסוק. מצב byte מוציא 8 ביט לכל בייט UTF-8. מצב kanji מוציא 13 ביט על תו שמצב byte היה מוציא עליו 24.

לכן הקידוד הזול ביותר הוא רק לעיתים רחוקות מצב אחד לכל המחרוזת — אבל גם המעבר אינו חינם, שכן כל מקטע משלם על מציין מצב בן 4 ביט ועל שדה מונה תווים. האם כדאי להוציא רצף ספרות למקטע נפרד תלוי באורכו. זה הופך את הפילוח לבעיית מסלול קצר ביותר, והמקודד הזה פותר אותה במדויק ולא מנחש לפי כלל אצבע.

HELLO12345678901234567890

as one alphanumeric segment
  4 + 9 + (11 x 12) + 6 = 151 bits

split at the digits
  4 + 9  + (11 x 2) + 6 =  41 bits
  4 + 10 + (10 x 6) + 7 =  81 bits
  total                 = 122 bits

עשרים ותשעה ביט, שבגרסה 1 הם ההבדל בין להיכנס ללא להיכנס. טבלת המקטעים בדף מציגה את הפילוח שהמקודד באמת בחר וכמה עלה כל מקטע, כך שאפשר לראות אילו תווים יקרים.

הגרסה והפילוח רודפים זה אחר זה

כאן הקמט שהופך מקודד תמים לשגוי. שדה מונה התווים אינו ברוחב קבוע. הוא 8 ביט למצב byte בגרסאות 1 עד 9, ו-16 ביט מגרסה 10 ומעלה; הנומרי עובר 10, 12 ו-14 באותם גבולות.

כלומר, עלות הפילוח תלויה בגרסה, והגרסה תלויה בעלות הפילוח. המוצא הוא לשים לב שיש רק שלוש קבוצות גרסאות, ולכן הפילוח מחושב פעם אחת לכל קבוצה, והגרסה הקטנה ביותר שנכנסת לאחת מהן מנצחת.

  • גרסאות 1–9: נומרי 10 ביט, אלפא-נומרי 9, byte 8, kanji 8.
  • גרסאות 10–26: נומרי 12, אלפא-נומרי 11, byte 16, kanji 10.
  • גרסאות 27–40: נומרי 14, אלפא-נומרי 13, byte 16, kanji 12.

המסכה נבחרת בארבעה כללי עונשין

הנתונים בקוד QR קרובים לאקראיים, ושחור-לבן אקראי מייצר צורות שסורק עלול לבלבל בינן לבין התבניות המבניות שהוא מחפש. התרופה היא להחיל XOR על אזור הנתונים עם תבנית סדירה שנבחרה כדי לפרק את הצורות האלה. יש שמונה, והמקודד מנסה את כולן.

כל סמל ממוסך מנוקד לפי ארבעה כללים מהתקן, והסכום הנמוך ביותר מנצח. הטבלה בדף מציגה את כל שמונת הניקודים מפורקים לפי כלל, ולחיצה על שורה כופה את המסכה הזו כדי לראות את ההשפעה.

  • רצפים: שלוש נקודות על חמישה מודולים סמוכים בצבע אחד בשורה או בעמודה, ועוד נקודה על כל מודול מעבר לכך.
  • בלוקים: שלוש נקודות על כל שטח 2×2 בצבע אחיד.
  • דמויות-איתור: ארבעים נקודות על הרצף 1:1:3:1:1 כהה-בהיר-כהה-בהיר-כהה לצד ארבעה מודולים בהירים — התבנית שנראית כמו ריבועי הפינות.
  • איזון: עשר נקודות על כל 5% שלמים שיחס המודולים הכהים מתרחק בהם ממחצית.

המימושים חלוקים כאן במקצת — בשאלה אם התבנית 1:1:3:1:1 נספרת גם בקנה מידה גדול יותר, ובשאלה אם מידע הפורמט נכנס לניקוד. המקודד הזה הולך אחרי הקריאה של ZXing, שהיא זו שרצה על רוב מצלמות הטלפון, והוא נעוץ מול שני מימושים עצמאיים. המחלוקת לעולם אינה מייצרת קוד לא תקף; היא רק קובעת איזו מבין כמה מסכות קריאות לחלוטין נבחרת.

מה לוגו במרכז באמת עולה

כולם מצטטים את אותו כלל: רמה H משחזרת 30%, ולכן אפשר לכסות עד 30% מהקוד. זו תשובה בצורה הלא נכונה, ומי שילך לפיה יקבל בסוף קוד שלא נסרק.

תיקון השגיאות בקוד QR אינו בריכה אחת. הנתונים מפוצלים לבלוקים של Reed-Solomon, לכל אחד קודמילי תיקון משלו, והבלוקים נשזרים על פני כל הרשת כדי ששריטה תפגע בכמה מהם מעט במקום באחד הרבה. כל בלוק יכול לאבד כמחצית מקודמילי התיקון שלו ועדיין להיבנות מחדש. לוגו במרכז הוא ריבוע מלא, וזו בדיוק הצורה שהשזירה נועדה לפזר — אבל היא לעולם אינה מפזרת באופן אחיד.

לכן השאלה אינה איזה חלק מהסמל מכוסה. השאלה היא כמה איבד הבלוק הפגוע ביותר. הדף הזה יודע לאיזו קודמילה שייך כל מודול ומאיזה בלוק הגיעה כל קודמילה, ולכן הוא יכול לענות ישירות: העלה לוגו והוא ידווח על הנזק לכל בלוק ועל המרווח שנשאר לגרוע שבהם.

  • כיסוי תבנית איתור, תבנית תזמון או מידע הפורמט אינו עניין של תקציב — הן אינן נושאות תיקון שגיאות, וסורק שלא מוצא אותן לא מגיע בכלל לשלב התיקון.
  • הנתון של מחצית הקודמילים הוא חסם עליון. הדפסה, בוהק, משטחים מעוגלים ובלאי צורכים מאותו תקציב, וקוד שנמצא בדיוק על הגבול במסך אינו על הגבול על ספל.
  • העלאת הרמה ל-H כדי להכניס לוגו גדול יותר מגדילה את הסמל, ולכן מקטינה כל מודול באותו גודל הדפסה — לפעמים הפסד ולא רווח.

פורמטי המטען, ואיפה הם נושכים

קוד QR ל-Wi-Fi או כרטיס איש קשר הם רק טקסט בצורה שסורקים מזהים. הצורות פשוטות; כללי הבריחה הם המקום שבו קודים אמיתיים נשברים, והם כשלים שקטים — הקוד נסרק מצוין ונותן את התשובה הלא נכונה.

WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;;

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Analytical Engines\, Ltd
END:VCARD

בפורמט Wi-Fi נקודה-פסיק מסיימת שדה, ולכן סיסמה שמכילה אחת קוטעת את פרטי ההזדהות אם אין לה בריחה — וכך גם פסיק, נקודתיים, מרכאות ולוכסן אחורי. שם רשת המורכב כולו מספרות הקסדצימליות חייב להיות עטוף במרכאות, אחרת הוא נקרא כערך הקסדצימלי ולא כטקסט. ב-vCard המפרידים הם נקודה-פסיק ופסיק, שורה מעל 75 אוקטטים חייבת להתקפל לשורת המשך שמתחילה ברווח, וסיום השורה הוא CRLF.

הבונים כאן מחילים את כל זה ואומרים מה עשו, במקום לשכתב את הקלט שלך בשקט. אם מופיעה הערה מתחת לשדות, משהו בטקסט שלך נזקק לטיפול — וזה בדרך כלל שווה לדעת לפני שמדפיסים אלף מדבקות.

שאלות נפוצות

למה הוספת תו אחד הגדילה את הקוד כל כך?
כי היא שינתה את פילוח המצבים, את הגרסה, או את שניהם. אות קטנה אחת במחרוזת שכולה אותיות גדולות עלולה לדחוף מקטע שלם ממצב אלפא-נומרי אל מצב byte, שעולה שמונה ביטים לתו במקום חמישה וחצי. מעבר מגרסה 9 לגרסה 10 מרחיב בנפרד כל שדה מונה תווים. טבלת המקטעים מראה לאן הלכו הביטים.
באיזו רמת תיקון שגיאות לבחור?
M היא ברירת המחדל ההגיונית וזו שרוב הקודים בעולם משתמשים בה. עברו ל-Q או ל-H כשהקוד יודפס קטן, על משהו מעוגל, על משטח שנוגעים בו, או כשמכסים את המרכז בלוגו. עברו ל-L רק כשהמטען ארוך והקוד ייקרא ממסך. רמות גבוהות יותר אינן מייצרות אמינות בחינם: הן מגדילות את הסמל לאותם נתונים, ולסמל גדול יותר באותו גודל הדפסה יש מודולים קטנים יותר.
כמה גדול יכול להיות הלוגו במרכז?
העלו אותו והדף יגיד לכם, כי התשובה הכנה תלויה בגרסה, ברמה ובאיפה נופלים הבלוקים. מה שהוא לא יעשה זה לחזור על כלל ה-30%, שעוסק בקודמילים ולא בשטח ובסמל כולו ולא בבלוק הגרוע ביותר. כנקודת התחלה, 15% מהצלע ברמה H בדרך כלל נוח ו-25% בדרך כלל לא.
האם אותיות גדולות בכתובת באמת מקטינות את הקוד?
לעיתים קרובות כן. במצב אלפא-נומרי אין אותיות קטנות, ולכן כתובת באותיות קטנות הולכת למצב byte בשמונה ביטים לתו, בעוד שכתובת באותיות גדולות נכנסת לאלפא-נומרי בחמישה וחצי. הסכמה והמארח אינם תלויי רישיות, ולכן HTTPS://EXAMPLE.COM עובד בדיוק כמו https://example.com — אבל הנתיב כן תלוי רישיות ואסור לגעת בו. הדף מודד את החיסכון על הכתובת שלך ומציע את השינוי רק כשהוא עוזר.
האם מצב kanji שווה את זה לטקסט יפני?
כן — הוא 13 ביט לתו במקום 24 של מצב byte ב-UTF-8, ולכן טקסט יפני יוצא בכמעט מחצית הגודל. הוא מכסה את טווח שני הבייטים של Shift_JIS, שכולל קאנה, את הקאנג׳י של JIS X 0208, וגם יוונית וקירילית. הדף הזה טוען את טבלת המיפוי רק כשהטקסט אינו ASCII טהור, ולכן קוד שנושא כתובת לעולם אינו מוריד אותה.
האם להפעיל את ההצהרה על UTF-8?
בדרך כלל לא. התקן אומר שמצב byte הוא ISO-8859-1 אלא אם כותרת ECI אומרת אחרת, אבל בפועל כל סורק שנוצר במאה הזו מתייחס אליו כאל UTF-8, וזה מה שהמקודד הזה כותב. הצהרה מפורשת עולה 12 ביט ומבלבלת קוראים תעשייתיים ישנים. הפעילו אותה אם אתם מכוונים לקורא מסוים שמתעד תמיכה ב-ECI.
למה אין Micro QR או קוד מרובה חלקים?
שניהם קיימים בתקן ושניהם היו נותנים לכם משהו שלא נסרק. Micro QR הוא סימבולוגיה נפרדת עם טבלאות קיבולת, מערך מסכות וקידוד פורמט משלה, ורוב אפליקציות המצלמה בטלפונים לא יקראו אותו. Structured Append מפצל מטען על פני עד שישה-עשר סמלים שכמעט שום סורק צרכני לא מרכיב בחזרה. אם הנתונים שלכם לא נכנסים לגרסה 40, התשובה היא לשים כתובת בקוד ואת הנתונים מאחוריה.
כמה קטן אפשר להדפיס קוד QR?
ההנחיה המקובלת היא שמודול יהיה לפחות 0.4 מ״מ בהדפסה, ושהקוד יהיה בערך עשירית ממרחק הסריקה חלקי מידת הגרסה — אבל האילוץ המעשי הוא אזור השקט. התקן דורש שוליים נקיים של ארבעה מודולים מכל צד, והכשל הנפוץ ביותר במציאות הוא קוד שנדחק אל עבודת גרפיקה אחרת. הגרסה ומספר המודולים המוצגים בדף הם מה שצריך כדי לעשות את החשבון הזה.