الشفرة الزوجية (Even Code)

مقدمة

في عالم الترميز ونقل البيانات، تلعب الشفرات دورًا حاسمًا في ضمان سلامة المعلومات ووصولها بشكل صحيح إلى وجهتها. من بين أنواع الشفرات المختلفة، تبرز “الشفرة الزوجية” كمفهوم أساسي يتميز بخصائص فريدة تجعله مفيدًا في تطبيقات معينة. في هذا المقال، سنتعمق في فهم الشفرة الزوجية، واستكشاف تعريفها وخصائصها وكيفية إنشائها، بالإضافة إلى استعراض تطبيقاتها العملية.

ما هي الشفرة الزوجية؟

الشفرة الزوجية هي نوع من الشفرات التي تتميز بكون الوزن الهامينغ (Hamming weight) لكل كلمة رمزية فيها زوجيًا. ببساطة، يعني هذا أن عدد الآحاد (1) في كل كلمة رمزية يجب أن يكون رقمًا زوجيًا (0، 2، 4، 6، إلخ). الوزن الهامينغ هو عدد الرموز غير الصفرية في الكلمة الرمزية.

مثال:

  • الكلمة الرمزية 0000 لها وزن هامينغ 0 (زوجي).
  • الكلمة الرمزية 1100 لها وزن هامينغ 2 (زوجي).
  • الكلمة الرمزية 1010 لها وزن هامينغ 2 (زوجي).
  • الكلمة الرمزية 1111 لها وزن هامينغ 4 (زوجي).

بالمقابل، الكلمات الرمزية التالية ليست جزءًا من شفرة زوجية:

  • الكلمة الرمزية 1000 لها وزن هامينغ 1 (فردي).
  • الكلمة الرمزية 1110 لها وزن هامينغ 3 (فردي).

خصائص الشفرة الزوجية

تتميز الشفرة الزوجية بعدة خصائص تجعلها مفيدة في بعض التطبيقات:

  • الكشف عن الأخطاء الفردية: يمكن للشفرة الزوجية اكتشاف أي خطأ يؤدي إلى تغيير بت واحد (أي تغيير 0 إلى 1 أو العكس) في الكلمة الرمزية. وذلك لأن تغيير بت واحد سيؤدي إلى تغيير الوزن الهامينغ من زوجي إلى فردي أو العكس، مما يشير إلى وجود خطأ.
  • البساطة: تعتبر الشفرة الزوجية بسيطة نسبياً في التنفيذ، مما يجعلها مناسبة للاستخدام في الأنظمة التي تتطلب معالجة سريعة وفعالة.
  • الكفاءة: على الرغم من قدرتها على اكتشاف الأخطاء، إلا أن الشفرة الزوجية تضيف بتًا واحدًا فقط لكل كلمة رمزية، مما يقلل من التكاليف الإضافية لنقل البيانات.

إنشاء الشفرة الزوجية

يمكن إنشاء الشفرة الزوجية عن طريق إضافة بت ت parity (تسمى أيضًا “بت التكافؤ”) إلى كل كلمة رمزية. يتم اختيار قيمة بت التكافؤ (0 أو 1) بحيث يكون الوزن الهامينغ للكلمة الرمزية الناتجة زوجيًا.

خوارزمية إنشاء الشفرة الزوجية:

  1. ابدأ بالكلمة الرمزية الأصلية.
  2. احسب الوزن الهامينغ للكلمة الرمزية الأصلية.
  3. إذا كان الوزن الهامينغ زوجيًا، قم بتعيين بت التكافؤ إلى 0.
  4. إذا كان الوزن الهامينغ فرديًا، قم بتعيين بت التكافؤ إلى 1.
  5. أضف بت التكافؤ إلى نهاية الكلمة الرمزية الأصلية.

مثال:

لنفترض أن لدينا الكلمة الرمزية الأصلية 1011.

  1. الوزن الهامينغ للكلمة الرمزية 1011 هو 3 (فردي).
  2. نقوم بتعيين بت التكافؤ إلى 1.
  3. تصبح الكلمة الرمزية المشفرة 10111.

الآن، الوزن الهامينغ للكلمة الرمزية المشفرة 10111 هو 4 (زوجي)، وبالتالي فإنها جزء من شفرة زوجية.

مثال آخر:

لنفترض أن لدينا الكلمة الرمزية الأصلية 0101.

  1. الوزن الهامينغ للكلمة الرمزية 0101 هو 2 (زوجي).
  2. نقوم بتعيين بت التكافؤ إلى 0.
  3. تصبح الكلمة الرمزية المشفرة 01010.

الآن، الوزن الهامينغ للكلمة الرمزية المشفرة 01010 هو 2 (زوجي)، وبالتالي فإنها جزء من شفرة زوجية.

مصفوفة المولد (Generator Matrix) للشفرة الزوجية

يمكن تمثيل الشفرة الزوجية باستخدام مصفوفة المولد. إذا كانت لدينا شفرة خطية (n, k)، حيث n هو طول الكلمة الرمزية المشفرة و k هو طول الكلمة الرمزية الأصلية، فإن مصفوفة المولد هي مصفوفة k × n تستخدم لإنشاء جميع الكلمات الرمزية المشفرة من الكلمات الرمزية الأصلية. في حالة الشفرة الزوجية، تكون مصفوفة المولد مصممة بحيث تضمن أن كل كلمة رمزية مشفرة لها وزن هامينغ زوجي.

لنفترض أن لدينا شفرة زوجية بسيطة تقوم بإضافة بت تكافؤ واحد إلى كلمة رمزية ثنائية طولها 3 بتات. في هذه الحالة، لدينا شفرة (4, 3). يمكن تمثيل مصفوفة المولد لهذه الشفرة على النحو التالي:

G = | 1 0 0 1 |
    | 0 1 0 1 |
    | 0 0 1 1 |

لإنشاء كلمة رمزية مشفرة، نقوم بضرب الكلمة الرمزية الأصلية في مصفوفة المولد. على سبيل المثال، إذا كانت الكلمة الرمزية الأصلية هي (1 0 1)، فإن الكلمة الرمزية المشفرة ستكون:

(1 0 1) * G = (1 0 1 0)

لاحظ أن الوزن الهامينغ للكلمة الرمزية المشفرة (1 0 1 0) هو 2، وهو زوجي.

تطبيقات الشفرة الزوجية

تستخدم الشفرة الزوجية في مجموعة متنوعة من التطبيقات، بما في ذلك:

  • ذاكرة الكمبيوتر: تستخدم الشفرة الزوجية في بعض أنظمة ذاكرة الكمبيوتر لاكتشاف الأخطاء التي قد تحدث بسبب الضوضاء أو العيوب في الذاكرة.
  • نقل البيانات: تستخدم الشفرة الزوجية في بعض بروتوكولات نقل البيانات لاكتشاف الأخطاء التي قد تحدث أثناء النقل.
  • التخزين المغناطيسي: تستخدم الشفرة الزوجية في بعض أنظمة التخزين المغناطيسي لاكتشاف الأخطاء التي قد تحدث أثناء القراءة والكتابة.
  • أنظمة التحكم: تستخدم الشفرة الزوجية في بعض أنظمة التحكم لضمان سلامة البيانات المستخدمة للتحكم في العمليات الصناعية.

مزايا وعيوب الشفرة الزوجية

المزايا:

  • بسيطة وسهلة التنفيذ.
  • تضيف القليل من التكاليف الإضافية لنقل البيانات.
  • فعالة في اكتشاف الأخطاء الفردية.

العيوب:

  • غير قادرة على تصحيح الأخطاء.
  • لا يمكنها اكتشاف الأخطاء الزوجية (أي الأخطاء التي تؤدي إلى تغيير عدد زوجي من البتات).
  • أقل قوة من الشفرات الأكثر تعقيدًا في اكتشاف الأخطاء.

بدائل للشفرة الزوجية

هناك العديد من الشفرات الأخرى التي يمكن استخدامها بدلاً من الشفرة الزوجية، بما في ذلك:

  • شفرة هامينغ: شفرة قادرة على اكتشاف وتصحيح الأخطاء الفردية.
  • شفرة ريد سولومون: شفرة قوية قادرة على اكتشاف وتصحيح الأخطاء المتعددة.
  • شفرة CRC (Cyclic Redundancy Check): شفرة تستخدم على نطاق واسع لاكتشاف الأخطاء في نقل البيانات.

يعتمد اختيار الشفرة المناسبة على المتطلبات المحددة للتطبيق، مثل مستوى الحماية من الأخطاء المطلوب، والتكاليف الإضافية المسموح بها، وتعقيد التنفيذ.

مثال على استخدام الشفرة الزوجية في C++

يوضح الكود التالي كيفية حساب بت التكافؤ ل byte باستخدام C++:

#include 
#include 

uint8_t calculateParityBit(uint8_t data) {
    uint8_t parity = 0;
    for (int i = 0; i < 8; ++i) {
        if (data & (1 << i)) {
            parity ^= 1;
        }
    }
    return parity;
}

int main() {
    uint8_t data = 0b10110010;
    uint8_t parityBit = calculateParityBit(data);
    std::cout << "Data: 0b" << std::bitset<8>(data) << std::endl;
    std::cout << "Parity Bit: " << (int)parityBit << std::endl;
    return 0;
}

سيقوم هذا البرنامج بحساب بت التكافؤ للبيانات المحددة وطباعتها.

خاتمة

الشفرة الزوجية هي أسلوب بسيط وفعال لاكتشاف الأخطاء الفردية في البيانات. على الرغم من أنها ليست قوية مثل بعض الشفرات الأخرى، إلا أنها لا تزال مفيدة في العديد من التطبيقات التي تتطلب حماية أساسية من الأخطاء بتكلفة منخفضة. إن فهم مبادئ الشفرة الزوجية وخصائصها وتطبيقاتها يسمح للمهندسين والمطورين باتخاذ قرارات مستنيرة بشأن اختيار أفضل طريقة لضمان سلامة البيانات في أنظمتهم.

المراجع