06-10-12, 12:46 AM
كاتب الموضوع : Ghaderws
بسم الله الرحمن الرحيم
بسم الله الرحمن الرحيم
احب ان انبه ان هذا المقال استكمال للمشاركات الواردة على هذا الرابط فان لم تطلع عليه انصحك بزيارته وقرائته بعناية وتحميل الامثلة الواردة به على الرابط التالى:
http://vb4arb.com/vb/showthread.php?1008
كل ما هناك ان الموضوع هنا يستهدف امرا يمكن ان نعتبره مجازا جملة عارضة وسط الفقرة وذلك بعد اذن استاذا (كمال فرحان) صاحب الموضوع الأصلى
احب ان انبه ايضا ان كل كلمة قمت بكتابتها هنا لم يتم نقلها عن اى منتدى او صفحة اوكتاب او حتى مترجمة من مرجع اخر وهى من كتاباتى الشخصية اهديها لاعضاء منتدانا الحبيب لينفرد حقا وحصريا بهذا الموضوع وهى لكم جميعا ويمكنكم استغلالها مجانا فقط دعوة لى بظهر الغيب كما ارجوا من من سيقوم باستخدامها تجاريا بالتبرع بما يعادل واحد دولار فقط للجنة الزكاة الشرعية بمدينته عن كل نسخة قام باصدارها مستخدما الدوال المذكورة هنا بغرض الاستخدام التجارى اخوكم (Ghaderws)
رسم الباركود بالترميز (Code128)
لماذا ال(Code128)؟:ال(Code128) هو ترميز عالمى تم الاتفاق عليه من قبل المنظمات فى امريكا واوروبا ويمكنه من ترميز جميع الحروف القابلة للطباعة ويحمل فى داخله ثلاثة فئات يمكنكم استخدامها بنائا على جدول لتحويل القيم خاصة بكل حرف قابل للطباعة واقصد بها الحروف التى تحمل فى جدول الاسكى القيم المحصورة بين الارقام (32 و 126) لذا فإن هذا الترميز يغنيك عن استخدام اى ترميز اخر كما سنرى .
ال(Code128) يوفر لك مساحة عند طباعة للباركود الخاص بالارقام نتيجة لامكانية اختزال الارقام كل رقمين يمكن الاستعاضة عنهم برقم واحد فقط لذا فإن حجم الباركود اثناء الطباعة سيكون اقل فى الحجم من اى باركود اخر كما سنرى عند استخدام الفئة (C) فيما يلى هذا الامر سيجعلكم تتركون كل انواع الترميز التى كنتم تستخدمونها
ال(Code128) يمكن لجميع قارئات الباركود قرائته وفهمه دون الحاجة لاعادة برمجتها لذا ستجدونه معتمد من قبل القارئات دون الحاجة لتعريفها عليه الامر الذى سيجعل لبرامجكم مصداقية واحترافية اكثر والخروج من المحلية للعالمية
خطة الدرس:
قمت بتقسيم هذا الدرس إلى ثلاثة اقسام وفضلت الا اضع اى جزء بالمنتدى إلا بعد اكتمال جميع الاجزاء لتكون مرجعا يسهل على الباحث الوصول المباشر إلى ما يريد دون ارهاقه فى متابعة جميع المشاركات وتكون المشاركات فيما بعد خاصة باستفسارات والاعضاء ومناقشاتهم والاجابة عليها والاجزاء هى:
1- تعريف بال(Code128)
2- خوارزمية رسم الباركود باستخدام ال(Code128)
3- افكار حول الفئة (C) لل(Code 128)
أولا: تعريف بال(Code128)
يعتمد الباركود عموما على مجموعة من الخطوط البيضاء والسوداء بتشفير معين تختلف باختلاف نوع الترميز المستخدم ويختلف عدد تلك الخطوط المستخدمة من نوع لاخر وال(Code128) يستخدم عدد (11) ما بين اسود وابيض لكل حرف تقوم بتشفيره باستخدام هذا النوع من الترميز وهو ععد اقل نسبيا من باقى انواع الترميز الاخرى التى تحتاج ما بين 12 و14 خط لترميز الحرف الواحد ويحتاج إلى بداية من ثلاثة بدايات توضح ان الكود المستخدم فى الترميز هو ال(Code128) والفئة المستخدمة فى الترميز - فكما ذكرنا يشمل هذا النوع من الترميز ثلاثة فئات – وينتهى الكود بحرف تكميلى للنص المراد تكويده ونهاية ثابتة لجميع الفئات
ويمكن تحويل جميع الحروف القابلة للطباعة فى جدول الاسكى للقيم المحصورة بين الارقام (32 و 126) بعد تحويلها لشكل يشبه كثيرا (الارقام الثنائية) والتى من المعروف انها تشمل ارقام الصفر والواحد فقط وتعبر الاصفار عن الخطوط السوداء بينما يعبر الرقم واحد عن الخطوط البيضاء انظر الصورة التالية والتى تم تشفير النص (VB4Arab)باستخدام ال(Code128) الفئة (B)
ويحتوى ال(Code128) على ثلاثة فئات يمكن استخدامه هى (A,B,C) لكل منها قدرة تختلف عن الاخرى وبداية تختلف عن الاخرى وتعد الفئة (B) هى الفئة الاكثر شيوعا واستخداما لكننا سنقوم بعمل خوارزمية تعمل للثلاثة فئات بإذن الله.
بالتأكيد انت تتسائل الان من اين لنا ان نعرف الارقام الباينرى التى تعبر عن ترميز الحروف ولن ادعك فى تلك الحيرة فالرابط التالى ستجد به الجدول الذى تريد:
http://www.adams1.com/128table.html
قم بزيارة الجدول من الرابط السابق ستجد القيمة (Value) تعبر عن قيمة الحرف المستخدم فى هذا الترميز والقيمة (Code A) تعبر عما يطبعة الترميز إذا ما استخدمت الفئة (A) والقيمة (Code B) تعبر عما يطبعة الترميز إذا ما استخدمت الفئة (B) والقيمة (Code C) تعبر عما يطبعة الترميز إذا ما استخدمت الفئة (C) والقيمة (Pattern B S B S B S) يعبر فيها الحرف (B) عن عدد الخطوط السوداء ويعبر الحرف (S) عن عدد الخطوط البيضاء واخيرا فإن (What ASCII Code Do I Print?) تعنى قيمة ذلك الحرف بجدول الاسكى
اشعر بأنك الأن تبتسم لفهم الامر لقد وجدت فى نهاية هذا الجدول بالتأكيد الترميز الخاص ببداية كل فئة اشرنا اليها وتعرف عند استخدامها ماذا سيكون الناتج من استخدامها ووجدت ايضا فى نهاية الجدول الترميز الخاص بإيقاف جميع الفئات ولكن ماذا عن النص التكميلى لاختبار الحروف والموجود فى الصورة قبل النهاية الثابتة انه لا يوجد بهذا الجدول؟؟؟ كيف اضيفة للترميز وماذا ان لم اقم باضافتة ماذا سيحدث؟؟؟
سأجيبك حالا فقط امهلنى حتى تقرأ كلماتى القادمة لن يمكن لقارئ الباركود قرائة هذا الترميز مالم تقم بإضافة الحرف الخاص بتكملة النص ولاضافتة قانون يجب حسابه لنرى اولا ما هو القانون ومن اين اتيت انا به اليك مصدرى على الرابط التالى :
http://www.adams1.com/128code.html
اشعر ان بعضكم لم يفهم هذا القانون لا الومكم انا شخصيا لم افهمه للوهلة الاولى لنرى ماذا يريد هذا القانون منا لحساب النص التكميلى:
1- انه يرغب منا استخراج قيمة الحروف المراد كتابتها بهذا الكود من الجدول ستجدها بالجدول الذى ذهبت الى رابطه فى العمود الأول من الشمال كما ذكرنا
2- انه يريد منا ايضا ضرب هذه القيمة فى مكان الحرف حسب ترتيبه
3- انه يريد مجموع كل هذه القيم
4- واخيرا يرغب فى حساب باقى قسمة الناتج على رقم (103)
اجد الكثير منكم يسقط على الارض من كثرة الضحك لتعقيد القانون لكن الامر اسهل من ان يكون معقدا حتى !
اجده سهل وبسيط ولن يقف عقبة امامنا اذا ما قمنا بتحويله إلى معادلة رياضية بسيطة السنا مبرمجين ؟؟؟ إذا لن تشكل هذه المعادلة الرياضية عقبة فى طريقنا لنأخذ الباركود السابق الخاص بتشفير النص (VB4Arab) مثال لفهم الامر لنرى ما سيكون لقد استخدمنا فى ترميزها (Start Code B) ثم الحروف (VB4Arab) ثم الحرف المكمل وأخيرا (Stop all Code) سنترك الحرف المكمل و (Stop all Code) جانبا لانهم لا يدخلون فى حساب الحرف المكمل للنص اما الباقى فسيدخلون معنا بقيمهم المذكورة فى الجدول لحساب الحرف المكمل للنص لنرى.
1- (Start Code B) كانت قيمته فى الجدول (104)
2- الحرف (V) وهو الحرف الأول من النص المراد تشفيره وكانت قيمته (54) سنضرب تلك القيمة فى (1) = (54)
3- الحرف (B) وهو الحرف الثانى من النص المراد تشفيره وكانت قيمته (34) سنضرب تلك القيمة فى (2) = (68)
4- الحرف (4) وهو الحرف الثالث من النص المراد تشفيره وكانت قيمته (20) سنضرب تلك القيمة فى (3) = (60)
5- الحرف (A) وهو الحرف الرابع من النص المراد تشفيره وكانت قيمته (33) سنضرب تلك القيمة فى (4) = (132)
6- الحرف (r) وهو الحرف الخامس من النص المراد تشفيره وكانت قيمته (82) سنضرب تلك القيمة فى (5) = (410)
7- الحرف (a) وهو الحرف السادس من النص المراد تشفيره وكانت قيمته (65) سنضرب تلك القيمة فى (6) = (390)
8- الحرف (b) وهو الحرف السابع من النص المراد تشفيره وكانت قيمته (66) سنضرب تلك القيمة فى (7) = (462)
9- لنقوم الان بحساب مجموع تلك النواتج (104)+(54)+(68)+(60)+(132)+(410)+(390)+(462) = (1680)
10- لنعرف الان باقى القسمة للرقم (1680) Mod (103) = (32)
11- لنبحث الان عن الحرف الذى يحمل تلك القيمة فى الجدول الخاص بهذا التشفير ... انه الحرف (@)
لذا فإن الباينرى المطلوب تكوينه سيكون قيم الحروف (Start CodeB,V,B,4,A,r,a,b,@,Stop all Code) من جدول الترميز
هكذا نستطيع التشفير او الترميز بالكود (Code 128) اجد انكم جميعا تتنفسوا الصعداء الان وتقولون دعنا نجرب كتابة هذه المعادلة بالفيجوال بيسك فما اسهلها بعد ان اتضح الامر للننتقل إلى الجزء الثانى من الدرس