Naser ناصر نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 السلام عليكم ورحمة الله يوجد لدي قائمة سلسلة حرفية .... مثال لواحد منها 101-01-21-4192B فهل يوجد خوارزمية تختصره الى رموز صغير مثلا يصبح ( Ae18) وهكذا اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 هل يمكنك تحديد الهدف من الخوارزمية؟ وهل تقصد أنك تريد ضغط النص و جعل منه نص أصغر و بإمكان النص الصغير الدلالة على النص الكبير؟ اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 نعم هذ بالضبط ما اريده من اجل طباعة الباركود فالنص الأصلي 101-01-21-4192B عند طباعة الباركود له يصبح الباركود كبير وصعب القراءة بقارئ الباركود اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ 1 دقيقة مضت قال Saeed عبدالله: نعم هذ بالضبط ما اريده أين تريد استخدام هذا المنطق ولأي لغة برمجة؟ اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 السلسلة مخزنة في قاعدة بيانات sql server اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ الآن قال Saeed عبدالله: السلسلة مخزنة في قاعدة بيانات sql server طيب ما لغة البرمجة التي تعمل BackEnd أرجو ذكر تفاصيل أكثر اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 انا اصدر البيانات من قاعدة البيانات الى TEXT FILE ثم اطبع الباركود اطبع الباركود من محرر النصوص المفكرة لو امكن عمل FUNCTION بـ SQL SERVER اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ 30 دقائق مضت قال Saeed عبدالله: انا اصدر البيانات من قاعدة البيانات الى TEXT FILE ثم اطبع الباركود اطبع الباركود من محرر النصوص المفكرة لو امكن عمل FUNCTION بـ SQL SERVER هل الغرض هو الحماية و تشفير معرف المنتجات؟ اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ 4 دقائق مضت قال Saeed عبدالله: لا عليك ذكر أي تفاصيل تساع على اختيار الحل الأمثل للمشكلة، ماذا سوف يفيدك النص المختصر؟ وضعه على باركود فقط؟ لأي هدف؟ تصويره من هاتف و جلب بيانات ما أو ماذا اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 اخي العزيز انسى موضوع طباعة الباركود ركز على موضوع الدالة التي تحول النص 101-01-21-4192B الى رمز مختصر مثلا Ae18 ودالة أخرى تعكس العملية مع الشكر اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 يمكن إعادة ترميز النص لنمط آخر، مثل Base64 وهو يحوي أحرف و أرقام .. باستعمال الطريقة التالية --String to Base64 SELECT CAST('string' as varbinary(max)) FOR XML PATH(''), BINARY BASE64 ^^^^^^ النص --Base64 to String SELECT CAST( CAST( 'c3RyaW5n' as XML ).value('.','varbinary(max)') AS varchar(max) ) ^^^^^^^^ ناتج الجزء الأول المشفر أو الشيفرة التالية: declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max) -- مدخلات و مخرجات set @source = convert(varbinary(max), 'Hello From Hsoub') -- نص نريد تشفيره set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)') -- نص مشفر set @decoded = cast('' as xml).value('xs:base64Binary(sql:variable("@encoded"))', 'varbinary(max)') -- فط التشفير -- استعلام يعمل على جدوللترميز و فك الترميز select convert(varchar(max), @source) as source_varchar, @source as source_binary, @encoded as encoded, @decoded as decoded_binary, convert(varchar(max), @decoded) as decoded_varchar في حال أردت ضغط النص: تقدم SQL server دالتين لضغط و فك ضغط النصوص وهما بالشكل العام التالي COMPRESS ( expression ) DECOMPRESS ( expression ) مثال للتنفيذ: SELECT COMPRESS ('WELCOME To Hsoub') AS Compressed_Value سوف تنتج التعليم السابقة نص مشفر مضغوط. لفك الضغط، نستعمل الدالة المعاكسة مع تمرير ناتج الدالة الأولى لها SELECT DECOMPRESS (0x1F8B0800000000......) AS Decompressed_Value // ^^^^^^^^^^^^^^^^^^^^^ Compressed_Value WELCOME To Hsoub سوف يتم إعادة النص الأول وهو WELCOME To Hsoub كناتج فك الضغط. يمكنك تجريب هذه الدالة تستخدم خوارزمية GZIP لضغط السلاسل النصية. إن مفهوم ضغط النصوص أمر يتعلق بخوارزمية الضغط و تكرار المحارف ضمن النص نفسه حيث كلما زاد تكرار الحروف يزداد معدل الضغط و ينقص حجم النص المضغوط الناتج يمكن ألا يكون النص المضغوط دوماً أصغر من النص الأصلي اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 شكرا لك اخي الكريم لكن هذا ليس المطلوب ، هذا شيء اخر غير المطلوب ، ارجع وتأمل السؤال والمطلوب جيدا ارجوا من باقي الاخوة المساعدة مع الشكر للجميع اقتباس
0 عمر قره محمد نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ 50 دقائق مضت قال Saeed عبدالله: شكرا لك اخي الكريم لكن هذا ليس المطلوب ، هذا شيء اخر غير المطلوب ، ارجع وتأمل السؤال والمطلوب جيدا ارجوا من باقي الاخوة المساعدة مع الشكر للجميع ما اظن انك تريد القيام به هو سحب البيانات من الـ db ومن ثم اختصارها وتقديمها مختصرة وبعد ذلك تقديم الباركود المختصر عبر الباركود ثم فك الاختصار في الحهة المقابلة بعد قراءة الباركود. اظن انه ستحصل على نفس النتيجة في حال قمت بالاختصار بعد الحصول على البيانات من الـ db في مرحلة قبل عرض الباركود يعني في الباك اند، ان كان بإمكانك مشاركة الباك إند الذي تعمل عليه فهناك العديد من الدوال التي تقوم بإختصار النصوص في اغلب لغات البرمجة. اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 شكرا على الرد..... لا يا اخي ليس هذا المطلوب .... هذه دوال تشفير وانا لا اريد تشفير اريد فقط دالة تختصر وتقلل الحجم من (101-01-21-4192B ) هذه طولها 15 خانة اريد اختصارها الى مثلا (Ae18) هنا اصبح طولها 4 خانات ملاحظة .......انظر ماذا صنع التشفير 0x3130312D30312D32312D3431393242 وهذا عكس المطلوب اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ 17 دقائق مضت قال Saeed عبدالله: اريد اختصارها الى مثلا (Ae18) هنا اصبح طولها 4 خانات هل يمكنك مشاركة ما تعيده SELECT CAST('101-01-21-4192B' as varbinary(max)) FOR XML PATH(''), BINARY BASE64 1 اقتباس
0 عمر قره محمد نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ منذ ساعة مضت قال Saeed عبدالله: شكرا على الرد..... لا يا اخي ليس هذا المطلوب .... هذه دوال تشفير وانا لا اريد تشفير اريد فقط دالة تختصر وتقلل الحجم من (101-01-21-4192B ) هذه طولها 15 خانة اريد اختصارها الى مثلا (Ae18) هنا اصبح طولها 4 خانات ملاحظة .......انظر ماذا صنع التشفير 0x3130312D30312D32312D3431393242 وهذا عكس المطلوب وهل يمكن التعبير عن 101-01-21-4192B بـ Ae18 من دون استخدام قاعدة بيانات تخبرك بأن Ae18 يساوي 101-01-21-4192B. لا اعتقد ان هنالك دالة عكوسة يمكنها تحويل اي قيمة تدخلها إلى شيفرة ب اربع خانات فقط إلا انه هنالك دوال تقوم بهذه الوظيفة ولكنها تسبب فقد في البيانات حيث لا يمكنك استعادة البيانات الاصلية قبل عملية التشفير. يبدو لي ان الحل الوحيد لمشكلتك إذا اردت استخدام طريقة ال Ae18 هي تخزين قاعدة بيانات تخبرك بأن Ae18 يساوي 101-01-21-4192B في الطرف الاخر الذي سيتلقى البيانات المشفرة وهكذا كل ما علينا هو تمرير ال Ae18 وترجمته إلى 101-01-21-4192B بعد وصوله. اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 لذلك انا أسال فلربما يوجد Formula جاهزة تصلح للعمل كدالة تقوم بهذا المطلوب أو يمكن انشائها من قبل الاخوة المحترفين هنا اقتباس
0 عمر قره محمد نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ 1 ساعة قال Saeed عبدالله: لذلك انا أسال فلربما يوجد Formula جاهزة تصلح للعمل كدالة تقوم بهذا المطلوب أو يمكن انشائها من قبل الاخوة المحترفين هنا لا اعتقد انه يمكن ان يوجد مثل هذه الدالة التي تطلبها، لكن اظن انه يمكننا التغلب على المشكلة التي تواجهها من دون الاعتماد على هذه الدالة الاسطورية. اقتباس
0 Naser ناصر نشر 17 يونيو 2022 الكاتب أرسل تقرير نشر 17 يونيو 2022 اشكرك بتاريخ 13 دقائق مضت قال عمر قره محمد: دون الاعتماد على هذه الدالة الاسطورية. دع المجال لغيرك إذا كنت تراها اسطورية اقتباس
0 Wael Aljamal نشر 17 يونيو 2022 أرسل تقرير نشر 17 يونيو 2022 بتاريخ 4 ساعات قال Saeed عبدالله: اريد فقط دالة تختصر وتقلل الحجم من (101-01-21-4192B ) هذه طولها 15 خانة اريد اختصارها الى مثلا (Ae18) هنا اصبح طولها 4 خانات عليك فهم السلسلة النصية كترميز من المعلومات، كل محرف فيها يمثل معلومة، لاختصار طول السلسلة يمكن أن تقوم بإعادة ترميز للمحارف فقط، وهي عملية ضغط النص. لا يمكن احتواء نفس المعلومات ضمن سلسلة نصية أخرى أقصر بدون عمل ضغط و فك ضغط لمنع خسارة المعلومات. وفي حال قمت بترميز نص طوله 15 كنص طوله 4 سيحدث تصادم collision أي نفس النص القصير سوف يرمز لنصين أو أكثر من الطويل الأبجدية لديك فيها حرف وهو B مثلاً ، فلا يمكن توسيعها لعدم وجود محارف غير أرقام وحروف أي base 64. محاولة أخرى، جرب عمل القصر ل 36 محرف SELECT cast(column as char(36)) as char36 اقتباس
السؤال
Naser ناصر
السلام عليكم ورحمة الله
يوجد لدي قائمة سلسلة حرفية .... مثال لواحد منها
101-01-21-4192B
فهل يوجد خوارزمية تختصره الى رموز صغير مثلا يصبح ( Ae18) وهكذا
21 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.