קיימות formula_2 מילים בינאריות שונות באורך m. כל מילה שכזו מקודדים במילה באורך m+r. עתה נשים לב שכדי לזהות שגיאה, אם נשנה את מילת הקוד בסיבית אחת כלשהי, עדיין צריכה להתקבל מילת המידע המקורית. לכן בעצם כל מילת מידע מקושרת ל-m+r+1 מילים שונות באורך m+r (מילת הקוד וכל וריאציה שלה בשינוי סיבית בודדת). על כן מבחינה מתמטית חייב להתקיים:
כלומר, מספר מילות הקוד והווריאציות עליהן חייב להיות גדול שווה למספר מילות המידע, כדי שיהיה ניתן לקודד כל מילת מידע.
מפיתוח אי השוויון הזה אנו מקבלים:
זהו כאמור חסם תחתון שכל קוד לתיקון שגיאה של סיבית בודדת חייב לקיים. נראה שקוד המינג מקיים את החסם המינימלי, כלומר קוד המינג מקיים:
בקוד המינג מוסיפים סיבית זוגיות על כל סיבית בייצוג הבינארי של מיקום הסיביות. עם r ספרות בינאריות אפשר לייצג כל מספר עשרוני עד formula_6 . מכאן שבעזרת r סיביות זוגיות של קוד המינג אנו יכולים לקדד מילות מידע עד אורך formula_7 (כיוון שגם סיביות הזוגיות תופסות מקום במילת הקוד, הרי ש-r סיביות תמיד שמורות להן). עבור ה-m המקסימלי בהינתן r, מתקיים:
כלומר קיבלנו:
לקחנו את ה-m המקסימלי לשם פשטות החישוב. אם היינו לוקחים כל m בתחום האפשרי עבור r כלשהו, היינו מקבלים תוצאה דומה, אך היינו נאלצים לעבוד עם פונקציית הערך השלם (כיוון שאי אפשר להשתמש ב"שברי" סיביות יתירות) על אי-שוויון המתאר את החסם. בכל מקרה אפשר (ובחלק מהמקרים אף נהוג) לקחת כל הודעה באורך הקטן מ-m המקסימלי, ולהוסיף לה אפסים לסופה כדי לקבל הודעה באורך מקסימלי (כדאי לשים לב שאופן פעולה כזה לא משנה אף סיבית מהמידע או הזוגיות).
על כן, ראינו כי קוד המינג הוא אופטימלי מבחינת סיביות יתירות הדרושות לצורך תיקון שגיאה בסיבית בודדת.
דוגמה לשימוש בקוד המינג (11,7).
נסתכל על מילת המידע "0110101" (באורך 7 סיביות, הנקראת משמאל לימין). לצורך ההדגמה של קוד ההמינג, צורת חישובו והשימוש בו כדי לזהות שגיאות, ראו את הטבלה שלהלן. הסימון d מציין סיביות מידע, ו-p מציין סיביות זוגיות.
תחילה מציבים את סיביות המידע במקומות המיועדים להם (המקומות שמהווים חזקות של 2 שמורים לסיביות הזוגיות), וסיביות הזוגיות מחושבות על פי המקובל (מספר אי זוגי של סיביות השוות ל-1 יתנו סיבית זוגיות השווה ל-1 גם כן).
מילת הקוד המתקבלת (עם סיביות הזוגיות) היא "10001100101" (באורך 11 סיביות). עתה נניח, לשם הדגמה, כי הסיבית האחרונה מתקבלת באופן משובש, כלומר הופכת ל-0, והמילה המשודרת היא "10001100100". כאשר אנו באים לנתח את המילה המתקבלת, נסמן ב-1 כל סיבית זוגיות שגויה (ביחס לחישוב זוגיות של הסיביות שהיא בודקת אותם).
השלב האחרון הוא לחשב את הערך המספרי של סיביות הזוגיות (ערך כל סיבית זוגיות נקבע על פי מיקומה). הערך המספרי של סיביות הזוגיות המחושבות בבדיקה הוא 11, דבר שמצביע על כך שהסיבית ה-11 במילת המידע (כולל סיביות הזוגיות) היא השגויה, ויש להפוך את ערכה.
כאשר נהפוך את הסיבית ה-11, נקבל חזרה את המילה המקורית ששודרה - "10001100101". אם נסיר את סיביות הזוגיות של קוד המינג, נחזור למילה המקורית 0110101.
יש לשים לב כי אם רק סיבית זוגיות אחת נכשלת, אז בוודאות היא הסיבית השגויה (ואפשר לבדוק זאת גם לפי שיטת הבדיקה לעיל).
לסיום, נניח כי שתי סיביות התחלפו, במקומות "x" ו-"y". אם "x" ו-"y" מוגנים על ידי אותה סיביות זוגיות, הרי שסיבית הזוגיות הזו לא תגלה את השגיאה בשניהם. אולם, לפחות סיבית זוגיות אחת תתגלה שגויה, כיוון ש-"x" ≠ "y" והם חייבים להיות שונים לפחות בסיבית אחת בייצוג שלהם (קיימת הצגה בינארית יחידה לכל מספר, וכל מספר מיוצג על ידי הצגה אחרת). על כן קוד המינג מזהה שקיימת שגיאה, אולם הוא אינו יכול להבדיל שגיאה זו משגיאות של סיבית בודדת, ובפרט לתת אינדיקציה בנוגע למקום הנכון שבו אירעה השגיאה.
קוד המינג (7,4).
כיום, "קוד המינג" מתייחס למעשה לקוד המינג הספציפי (7,4), אשר הוצג לראשונה בשנת 1950. קוד המינג זה מוסיף 3 סיביות זוגיות על כל 4 סיביות מידע של ההודעה. בדומה לקוד המינג הכללי, האלגוריתם של קוד המינג (7,4) מסוגל לתקן כל שגיאה בסיבית בודדת, ולזהות כל שגיאה בסיבית בודדת או שתי סיביות. דבר זה אומר שעבור ערוצי שידור שבהם בדרך כלל לא קורים פרצי שגיאה, קוד המינג (7,4) אפקטיבי למדי (שכן הסבירות לשתי שגיאות ב-7 סיביות היא נמוכה מאוד, והערוץ צריך להיות רועש למדי כדי שמצב כזה יקרה).
על מנת להגדיל את אפשרויות התיקון ניתן להשתמש בטכניקה הבאה: נחלק את המילים (כעת מילה היא רצף מקודד בקוד המינג של 7 אותיות) שברשותנו לקבוצות בנות 7 מילים. כעת במקום לשדר מילה אחר מילה, נשדר בכל פעם 7 סיביות ממילים שונות. כך, אם יש פרץ שגיאה, שבדרך הורס מספר גדול של סיביות, ניתן יהיה לתקן, כי בכל מילה תהרס רק סיבית אחת.
דוגמה לפענוח קוד המינג (7,4).
נסתכל על אותה מילת המידע "0110101" (באורך 7 סיביות, הנקראת משמאל לימין) כאשר היא כוללת בתוכה את ה-nible (יחידת מידע של 4 סיביות) שערכו "1101" ועוד 3 סיביות המינג. נשים את המידע בטבלה הבאה ונסמן את סיביות ההמינג באות H:
כעת נחשב את ערכי סיביות ההמינג לפי קוד המינג, כך שכל סיבית המינג תהיה פעולת XOR בין כל הסיביות הסוכמות אותה, למשל 1+2=3 אז b3 יופיע גם ב-b1=H וגם ב-b2=H. עבור nible (ארבע סיביות) נקבל:
b1=b3formula_10b5formula_10b7
b2=b3formula_10b6formula_10b7
b4=b5formula_10b6formula_10b7
כל שנותר לעשות הוא לחשב את ערכי סיביות ההמינג לפי קוד המינג ולראות אם הן תואמות למידע שקיבלנו בהתחלה:
b1=1formula_101formula_101=1
b2=1formula_100formula_101=0
b4=1formula_100formula_101=0
ניתן לראות כי סיביות b1, b2 אינן תואמות למקור. נסכום אותם ונקבל את הסיבית השגויה: 1+2=3 כלומר הסיבית השגויה היא סיבית b3, נהפוך אותה ונקבל את המידע הנכון: "0100101", כאשר ה-nible הנכון הוא: "0101".
מטריצות המינג.
באופן מעשי, קודי המינג משתמשים במכפלת מטריצות מיוחדות הקרויות "מטריצות המינג" כדי לממש את הפעולות של יצירת הקוד ובדיקת הזוגיות. עבור קוד המינג (7,4), משתמשים בשתי מטריצות קשורות זו לזו - מטריצת יצירת הקוד G ומטריצת בדיקת הזוגיות H:
ארבע השורות הראשונות של G מייצגות את מטריצת היחידה formula_24, כאשר שלוש השורות האחרונות מהוות מיפוי מ-4 סיביות המידע ל-3 סיביות הזוגיות. וקטורי העמודה ב-G מהווים בסיס לגרעין של H. מטריצת היחידה מעבירה את וקטור המידע אל מעבר לשלב המכפלה (מטריצת היחידה מהווה איבר יחידה ביחס למכפלת מטריצות). בניגוד למה שנאמר לעיל, כאן סיביות הזוגיות מופיעות בסוף מילת הקוד (סידור סיביות הזוגיות כפי שהוצג מקודם נועד לנוחיות ההצגה וההבנה, ואין לו משמעות עקרונית בקוד עצמו).
באופן דומה, שלוש העמודות האחרונות של H מייצגות את מטריצת הזהות formula_25, כאשר ארבע העמודות הראשונות מייצגות את המיפוי (הזהה למיפוי של מטריצה G) בין סיביות המידע לסיביות הזוגיות.
לצורך ביצוע האלגורתמים של יצירת הקוד והבדיקה, מייצגים את מילת המידע בתור וקטור עמודה. לדוגמה, אם מילת המידע שלנו היא "1011", נקבל את הווקטור:
קידוד המידע.
נניח כי ברצוננו לשדר את המידע מעל ערוץ רועש. על כן, ניקח את המכפלה של G ו-p, כאשר המכפלה מתבצעת במודולו-2, ונקבל את מילת הקוד x שיש לשדר (נשים לב שמילת הקוד אכן באורך 7 סיביות, וסיביות הזוגיות מופיעות בסוף המילה):
בדיקת זוגיות.
אם שום שגיאה לא אירעה במהלך השידור, הרי שמילת הקוד המתקבלת r זהה למילת הקוד המשודרת x:
כדי לראות אם אירע שיבוש במילת הקוד, המקבל צריך להכפיל את H עם r. ביצוע המכפלה הזו (שוב במודולו-2) מניב את התוצאה:
כיוון שקיבלנו את וקטור האפס, המקבל יכול להסיק כי שום שגיאה לא אירעה.
וקטור האפס מציין שלא אירעו שגיאות כיוון שכאשר וקטור המידע מוכפל עם G, הווקטור המתקבל מהמכפלה מהווה צירוף ליניארי של הבסיס של H. לכן, כל עוד לא מתבצע שום שינוי בזמן השידור, r ימשיך להיות בגרעין של H, והמכפלה תמשיך להניב את וקטור האפס.
תיקון שגיאות.
עכשיו נניח כי אירעה שגיאה בסיבית בודדת. באופן מתמטי, ניתן לכתוב
כאשר ביטוי זה הוא במודולו-2, ו-formula_31 הוא וקטור היחידה ה-i, כלומר וקטור עמודה שכל האיברים שלו שווים לאפס, פרט לאיבר ה-i, אשר שווה ל-1. על כן, הביטוי הנ"ל מציין כי אירעה שגיאה בסיבית ה-i של המידע.
עתה, אם נכפיל וקטור זה ב-H:
כיוון ש-x הוא המידע המשודר, הוא ללא שגיאות, ולכן תוצאת המכפלה של H ו-x הוא אפס (כפי שראינו קודם). לכן:
הכפלת H עם וקטור היחידה ה-i מניבה בתוצאה את העמודה ה-i של H, ועל כן אנו יודעים כי השגיאה אירעה בסיבית שמספר סידורה הוא כמו העמודה שקיבלנו, כלומר שהסיבית השגויה היא הסיבית ה-i, ועל כן נוכל לתקן את השגיאה בעזרת מידע זה.
לדוגמה, נניח כי המידע המתקבל הוא:
כשנבצע את המכפלה נקבל,
אשר מתאים לעמודה השנייה של H. על כן, השגיאה אירעה בסיבית השנייה, ולכן ניתן לתקנה.
לא מסובך להראות כי רק שגיאות בסיבית בודדת ניתן לתקן על ידי שימוש בסכמה זו. פרט לכך, ניתן להשתמש בקודי המינג כדי לזהות שגיאות בסיבית בודדת או בשתי סיביות, פשוט על ידי בחינת המכפלה של וקטור המידע עם H - קיימת שגיאה ודאית אם המכפלה אינה שווה לווקטור האפס. עם זאת, כפי שנאמר, בלתי אפשרי להבדיל בין שגיאות בסיבית בודדת לשגיאות בשתי סיביות בשימוש קוד המינג בלבד.
קוד המינג עם סיבית זוגיות נוספת.