نمایش نتایج 1 تا 8 از 8

نام تاپیک: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

  1. #1

    عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    سلام من می خوام یه حلقه بنویسم که مثلا 1000 عدد تصادفی 8 رقمی بدون تکرار رو تولید کنه و در یک بانک ذخیره کنه. لطفا اگه کسی می دونه چطوری میشه عدد تصادفی بدون تکرار تولید کرد بگه(با سی شارپ)

  2. #2

    نقل قول: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    نقل قول نوشته شده توسط piramit مشاهده تاپیک
    سلام من می خوام یه حلقه بنویسم که مثلا 1000 عدد تصادفی 8 رقمی بدون تکرار رو تولید کنه و در یک بانک ذخیره کنه. لطفا اگه کسی می دونه چطوری میشه عدد تصادفی بدون تکرار تولید کرد بگه(با سی شارپ)
    سلام.
    متاسفانه چنین چیزی بصورت Built-in وجود نداره. شما باید عدد تصادفی رو در Range مورد نظرتون تولید کنید، سپس عدد تولید شده رو در HashSet (بطور نمونه) نگهداری کنید و هر وقت تولید عدد جدید اتمام پذیرفت، با مراجعه به HashSet از عدم وجودش مطمئن بشید و اونو در HashSet ذخیره کنید.

    byte[] seed = new byte[4];
    using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
    rng.GetBytes(seed);

    HashSet<int> results = new HashSet<int>();

    Random rnd = new Random(BitConverter.ToInt32(seed, 0));
    for (int i = 0; i < 1000; i++)
    {
    int proposedNr = 0;
    do
    {
    proposedNr = rnd.Next(10000000, 99999999 + 1);
    } while (results.Contains(proposedNr));

    results.Add(proposedNr);
    }


    البته پر واضح هستش که میتونید به روشهای دیگه ای نیز مساله رو حل کنید، اما من واضح ترین روش رو خدمتتون عرض کردم.

    فقط چند نکته اینجا باقی میمونه:

    1. هدف از اینکار چی هستش؟ اگر هدفتون ایجاد یک Unique ID در سطح بانک هستش، باید از فیلد IDENTITY (در SQL Server)، فیلد AutoNumber در MS-Access و ... برای اینکار استفاده کنید. همچنین می تونید از Unique Identifier ها در سطح بانک (بازهم SQL Server) استفاده کنید.
    2. برای اینکه متوجه دلیل استفاده از RNGCryptoServiceProvider در کد فوق بشید، به این پست رجوع کنید.
    3. کلاس HashSet در .NET 4 در دسترس هستش. اگر از نسخه های قدیمی تر استفاده میکنید، میتونید به این پست رجوع کنید تا با روش استفاده از این کلاس در نسخه های قبلی .NET Framework نیز آشنا بشید.

    موفق باشید.

  3. #3

    نقل قول: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    روش زیر هم میتونه تاحدی مفید باشه :


    string Random()
    {
    return Guid.NewGuid().ToString().GetHashCode().ToString() ;
    }






  4. #4

    نقل قول: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    نقل قول نوشته شده توسط Salar Ashgi مشاهده تاپیک
    روش زیر هم میتونه تاحدی مفید باشه :
    سلام.
    GetHashCode در ایده آل ترین پیاده سازی، Unique بودن اعداد رو تضمین می کنه، اما در دنیای واقعی این مساله غیر ممکن (یا بهتره بگم غیر عملی) هستش. بطور مثال، این کد رو در .NET Framework 2.0 اجرا کنید:

    Trace.WriteLine("0:93121".GetHashCode());
    Trace.WriteLine("0:2546870".GetHashCode());


    علیرغم اینکه اینجا HashCode دو رشته متفاوت رو داریم می گیریم، اما جالبه که نتیجه یکسان خواهد بود. (من قبلا در این مورد در وبلاگم مطلبی نوشته بودم). نتیجه اینکه نباید روی Unique بودن Hash Code های حاصله از GetHashCode حساب باز کرد.

    موفق باشید.

  5. #5

    نقل قول: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    نتیجه اینکه نباید روی Unique بودن Hash Code های حاصله از GetHashCode حساب باز کرد.
    کاملا درست است ، روش بنده هم فقط ایده ای جهت انجام کار بود ؛ که همانطور که گفتید ، ممکن است
    جوابی در همه شرایط نباشد ولی قابل استفاده است .

    موفق باشید ./






  6. #6
    کاربر جدید آواتار hadinajafigharetappeh
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    ايران_تبريز
    سن
    39
    پست
    28

    نقل قول: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    سلام ولي به نظر من چون شمابا ديتا بيس سرو كار دارين فيلد مورد نظرتون كليد در نظر بگيريد و هربار كه عدد توليد شده را داريد ذخيره مي كنيد اگر تكراري بود دتا بيس به شما ارور خواهد داد كه به دو صورت مي تونيد عمل كنيد يكي اينكه با امكانات خود اس كيو ال و ديگري اينكه در بدنه catch مي توانييد عدد جديد را بدست اوريد و چايگزين كنيد اگر خواستيد بگيد تا كدش رو براتون بذارم

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    تهران
    پست
    45

    نقل قول: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    int b=dateTime.Now.ticks
    اینو میتونی hash کنی. میتونی از تابع sin(b)*123456789123 استفاده کنی بعد رندش کنی بدون اعداد اعشاری

  8. #8

    نقل قول: عدد تصادفی n رقمی بدون تکرار و ذخیره در بانک

    نقل قول نوشته شده توسط hadinajafigharetappeh مشاهده تاپیک
    سلام ولي به نظر من چون شمابا ديتا بيس سرو كار دارين فيلد مورد نظرتون كليد در نظر بگيريد و هربار كه عدد توليد شده را داريد ذخيره مي كنيد اگر تكراري بود دتا بيس به شما ارور خواهد داد كه به دو صورت مي تونيد عمل كنيد يكي اينكه با امكانات خود اس كيو ال و ديگري اينكه در بدنه catch مي توانييد عدد جديد را بدست اوريد و چايگزين كنيد اگر خواستيد بگيد تا كدش رو براتون بذارم
    مشیه این مثالی که گفتید رو برام زحمتشو بکشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •