PDA

View Full Version : ایجاد شماره سریال با تعداد کاراکتر ثابت از روی داده های متغیر



parastoo_zamani
دوشنبه 18 آبان 1388, 10:50 صبح
با سلام :

من دارم روی یه برنامه انبارداری کار می کنم ، در این برنامه قسمتی باید باشه که شماره سریال 3 دستگاه مختلف رو بگیره و یه شماره سریال با تعداد کاراکتر ثابت مثلا 16 کاراکتری رو بده :

مثال :

سریال کالای اول : A435265
سریال کالای دوم : 435T11b
سریال کالای سوم : T43222A43S6543

اینها داده های ما هستند که به عنوان ورودی به کار خواهند رفت و برای هر با ورود اطلاعات متفاوت خواهند بود .

حالا من می خواهم با یه الگوریتمی این سه داده رو باهم تلفیق کرده و یه شماره سریال 16 کاراکتری بدست بیاورم به طوری که بعدا بتونم با روش معکوس داده های اصلی رو از روی اون شماره سریال دریافت کنم .

اگه از دوستان روشی برای این کار می دونه لطفا راهنمایی کنید .

Felony
دوشنبه 18 آبان 1388, 12:57 عصر
یکم وقت بزار و یه الگوریتم خودت بساز ، در مورد کار شما کار پیچیده ای نیست .

parastoo_zamani
دوشنبه 18 آبان 1388, 13:19 عصر
یکم وقت بزار و یه الگوریتم خودت بساز ، در مورد کار شما کار پیچیده ای نیست .

من خیلی سعی کردم ولی به خاطر وجود کاراکترهای نوع Char و غیر عددی به نتیجه دلخواه نرسیدم چون تبدیل و تلفیق این کاراکترها نه با اعداد جور در میاد و نه با هگزادسیمال !!!

AliReza Vafakhah
دوشنبه 18 آبان 1388, 20:19 عصر
خوب یه روش ساده کاراکتر ها رو کم و زیاد کن یا کد اسکی کاراکتر ها رو بگیر به مبنای خاصی تبدیل کن

parastoo_zamani
سه شنبه 19 آبان 1388, 07:59 صبح
خوب یه روش ساده کاراکتر ها رو کم و زیاد کن یا کد اسکی کاراکتر ها رو بگیر به مبنای خاصی تبدیل کن



خوب یه روش ساده کاراکتر ها رو کم و زیاد کن

مجموع كاراكترهاي سه تا شماره سريال ورودي 25 كاراكتر ميشه ، چطور ميشه با كم و اضافه كردن كاراكتر خروجي 16 كاراكتري داشت به طوري كه با اين خروجي بشود دوباره داده هاي اوليه رو بدست آورد ؟!



کد اسکی کاراکتر ها رو بگیر به مبنای خاصی تبدیل کن

ميشه بيشتر توضيح بديد ؟
من اين كار رو كردم ولي خروجي كه گرفتم يه رشته با طول كاراكتر زياد بود !!

Hadi_Fayyaz
سه شنبه 19 آبان 1388, 09:13 صبح
سلام دوست عزيز
اگه منظور شما از شماره سريال اينه كه تمام 16 كاراكتر از نوع عددي باشند كه به نظر من اين كار ممكن نيست چون شما نميتونيد تمام حروف الفبا رو با اعداد يك رقمي كد گذاري كنيد. استفاده از كد اسكي هم مشكلي رو حل نميكنه چون براي هر كاراكتر شما يك عدد سه رقمي خواهيد داشت كه مشكل رو پيچيده تر ميكنه حالا شما دو تا كار ميتونيد انجام بديد اول اينكه دنبال يك الگوريتم رياضي باشيد كه اعداد حاصل از جايگزيني كد هاي اسكي رو به يك عدد 16 رقمي تبديل كنه و برگشت پذير هم باشه كه فكر نميكنم به اين سادگي باشه.
و راه حل دوم اينكه همين كد هاي اوليه رو در يك جدول قرار بديد و معادل اونها يك عدد 16 رقمي توسط سيستم ايجاد كنيد و در ستون دوم جدول قرار بديد در واقع يك نوع Maping انجام بديد.
موفق باشيد

parastoo_zamani
سه شنبه 19 آبان 1388, 09:35 صبح
كد هاي اوليه رو در يك جدول قرار بديد و معادل اونها يك عدد 16 رقمي توسط سيستم ايجاد كنيد


این کاری که گفتید رو چه جوری باید توسط سیستم انجام بدم ؟

Hadi_Fayyaz
سه شنبه 19 آبان 1388, 10:27 صبح
سلام دوست عزيز

شما ميتونيد يك جدول با دوتا فيلد در ديتابيس ايجاد كنيد و هر اسمي هم كه خواستيد به اون بديد.
حالا به ازاي هر كد 14 كاراكتري كه اول به اون اشاره كرديد يك سطر به ترتيب زير در اين جدول اضافه ميكنيد
1- كد 14 كاراكتري اوليه رو در يكي از فيلد ها درج ميكنيد
2- سپس بر حسب اينكه چه تعداد ركورد تا حالا داخل جدول درج شده عددي معادل تعداد ركورد هاي درج شده قبلي به اضافه يك ايجاد كرده و در فيلد دوم جدول درج ميكنيد.
حالا اين ديگه سليقه شماست اگه حتما ميخوايد عدد ايجاد شده 16 رقمي باشه ميتونيد فيلد مربوطه رو از نوع Char 16 در نظر بگيريد و اونقدر "0" قبل از عدد ايجاد شده اضافه كنيد تا تعداد كاراكتر ها به 16 برسه
اگه هم ميخوايد حتما فيلد شماره سريال 16 رقمي شما حتما 16 رقم داشته باشه و حتما هم عددي باشه ميتونيد عدد حاصل رو با 1000000000000000 جمع كنيد اونوقت يك عدد 16 رقمي خواهيد داشت.
براي پيدا كردن عدد اوليه هم كافيه با يك دستور Locate يا هر روش ديگه اي كه دوست داريد ركورد حاوي عدد 16 رقمي توليد شده خودتون رو پيدا كنيد و فيلد مقالبل اون كه همون كد 14 كاراكتري اوليه هست رو بدست بياريد.
اميد وارم تونسته باشم راهنمايي كنم
اگه بازم سوال بود مطرح كنيد.