ورود

View Full Version : سوال: کد ساخت اعداد و حروف تصادفی(random)



Farad-13
سه شنبه 25 مهر 1391, 17:47 عصر
درورد.
دوستان کسی می دونه چطوری می تونم در یک تکست باکس از رندوم استفاده کنم؟
مثل این برنامه ای که پیوست کردم

محسن واژدی
سه شنبه 25 مهر 1391, 20:28 عصر
سلام علیکم
تابع زیر را در ماژول کد/فرم قرار بدین:
Public Enum RandomCharsTypeConstants
rcAnyChr
rcOnlyWords
rcOnlyNums
rcOnlyWordsAndNums
End Enum
Public Function RandomChars(Optional sFixedWord$ = Empty, Optional RandomCharsType As RandomCharsTypeConstants = rcOnlyWordsAndNums, Optional iMaxLength% = 5, Optional AllLowerCase As Boolean = True) As String
On Error GoTo hErr
Dim sChrsList$, i%
Dim sAZ$, sNUM$
Const iMaxDigitNums% = 4
sAZ$ = "qwertyuiopasdfghjklzxcvbnm"
If iMaxLength% <= 1 Then iMaxLength% = 1

sNUM$ = "1234567890"

Select Case RandomCharsType
Case rcOnlyWords, rcOnlyWordsAndNums: sChrsList$ = sChrsList$ & sAZ$ & IIf(Not AllLowerCase, UCase$(sAZ$), "")
Case rcOnlyNums: sChrsList$ = sNUM$
Case Else: RandomCharsType = rcOnlyWordsAndNums: sChrsList$ = sChrsList$ & sAZ$ & IIf(Not AllLowerCase, UCase$(sAZ$), "") ' & sNUM$
End Select


For i = 1 To IIf(iMaxLength% > iMaxDigitNums% And (RandomCharsType = rcOnlyWordsAndNums Or RandomCharsType = rcOnlyNums), iMaxLength% - iMaxDigitNums%, iMaxLength%)
Randomize
If RandomCharsType = rcAnyChr Then
RandomChars = RandomChars & Chr(Abs(Int(Rnd * 255)))
Else
RandomChars = RandomChars & Mid(sChrsList$, Abs(Int(Rnd * Len(sChrsList$))), 1)
End If
Next

If iMaxLength% > iMaxDigitNums% And (RandomCharsType = rcOnlyWordsAndNums Or RandomCharsType = rcOnlyNums) Then
For i = 1 To iMaxDigitNums%
Randomize
RandomChars = RandomChars & Mid(sNUM$, Abs(Int(Rnd * Len(sNUM$))), 1)
Next
End If

RandomChars = sFixedWord$ & RandomChars
Exit Function
hErr:
Resume
End Function

پارامتر های تابع RandomChars


sFixedWord: رشته ثابتی که در هرصورت قبل از رشته تصادفی قرار میگیرد



RandomCharsType: دو آرگومان دارد:

rcAnyChr: کاراکترتصادفی از لیست کاراکترها انتخاب میشود
rcOnlyWords: مقدار برگشتی فقط حروف
rcOnlyNums: مقدار برگشتی فقط اعداد
rcOnlyWordsAndNums: مقدار برگشتی حروف و شماره ها از لیست سفارشی sChrsList (کاراکترهای جدید را به این متغیر اضافه کنید)


iMaxLength: طول رشته تصادفی
AllLowerCase: اگه True باشد همه کاراکترهای lower-case در غیراینصورت مخلولی از lower و upper-case خواهند بود



برای مثال:

Private Sub Command1_Click()
Caption = RandomChars()
End Sub
یا
Private Sub Command1_Click()
Caption = RandomChars(,rcOnlyWordsAndNums, 10, True)
End Sub

و یا (تنها حروف+رشته ثابت XXX):
Private Sub Command1_Click()
Caption = RandomChars("XXX-", rcOnlyWords, 10, True)
End Sub


موفق باشید

Farad-13
سه شنبه 25 مهر 1391, 23:34 عصر
ممنون بابت پاسخ.
میشه در برنامه به وسیله یک Command و یک Form تعداد اعداد و حروف رو تنظیم کرد؟

محسن واژدی
چهارشنبه 26 مهر 1391, 09:06 صبح
ممنون بابت پاسخ.
میشه در برنامه به وسیله یک Command و یک Form تعداد اعداد و حروف رو تنظیم کرد؟
خواهش میکنم،
میبخشید زیاد متوجه نشدم، البته در تابع بالا طول رشته تولید شده را میتوانیم کم و زیاد کنیم

Farad-13
چهارشنبه 26 مهر 1391, 17:59 عصر
منظورم اینه که کسی که داره از برنامه استفاده می کنه بتونه طول رشته تولید شده رو کم و زیاد کنه.
به وسیله ی یک Form و Command

محسن واژدی
پنج شنبه 27 مهر 1391, 11:09 صبح
منظورم اینه که کسی که داره از برنامه استفاده می کنه بتونه طول رشته تولید شده رو کم و زیاد کنه.
به وسیله ی یک Form و Command

طول رشته تولید شده را در آرگومان iMaxLength قرار بدین برای مثال اگر بخواهیم رشته ای با طول 50 ایجاد کنیم:

Private Sub Command1_Click()
Caption = RandomChars(, 50)
End Sub


موفق باشید

Farad-13
پنج شنبه 27 مهر 1391, 14:38 عصر
می خوام تنظیماتش مثل این عکس تغییر کنه

94129

برنامه پیوست شد.

محسن واژدی
شنبه 29 مهر 1391, 09:23 صبح
می خوام تنظیماتش مثل این عکس تغییر کنه

برنامه پیوست شد.

سلام علیکم
مجددا کد پست 2 را بررسی کنید

موفق باشید

Farad-13
شنبه 29 مهر 1391, 14:52 عصر
ممنون حل شد.
و اما یک مشکل دیگه بعد از انتخاب طول رشته توسط Combobox با زدن دکمه Run رشته رفرش نمی شه!

94180

سورس پیوست شد.

محسن واژدی
شنبه 29 مهر 1391, 20:06 عصر
ممنون حل شد.
و اما یک مشکل دیگه بعد از انتخاب طول رشته توسط Combobox با زدن دکمه Run رشته رفرش نمی شه!

94180

سورس پیوست شد.
روال Command1_Click در فرم Form1 را با کد زیر جایگزین کنید:

Private Sub Command1_Click()

If Check1.Value = vbChecked Then
'Form2.Combo1.ListIndex = True
Text1 = RandomChars(rcAnyChr, Form2.Combo1.Text, True)
End If

If Check3.Value = vbChecked Then
TextFirst.Text = RandomChars(rcAnyChr, 5, True)
End If

If Check3.Value = vbChecked Then
TextLast.Text = RandomChars(rcAnyChr, 7, True)
End If

End Sub

موفق باشید

Farad-13
دوشنبه 01 آبان 1391, 01:43 صبح
درود
من دوباره برگشتم با کلی سوال :خجالت:

1.چطوری می شه رشته rcOnlyWordsAndNums طوری تعیین کرد که اعداد فقط آخر رشته تکرار بشن. مثل: qwfhuodx356

2.("XXX-", rcOnlyWords, 10, True) <<< درباره چگونگی استفاده از رشته بیشتر توضیح بدین

محسن واژدی
دوشنبه 01 آبان 1391, 11:19 صبح
.چطوری می شه رشته rcOnlyWordsAndNums طوری تعیین کرد که اعداد فقط آخر رشته تکرار بشن. مثل: qwfhuodx356
سلام علیکم
دوباره تابع پست 2 را بررسی کنید (بعد از انتخاب نوع rcOnlyWordsAndNums رشته عددی بعد از رشته کاراکتری قرار میگیرد)


("XXX-", rcOnlyWords, 10, True) <<< درباره چگونگی استفاده از رشته بیشتر توضیح بدین
توضیح خاصی نداره، تنها رشته ثابت مورد نظر را در آرگومان اول قرار دهید (علامت منهای جوی رشته XXX صرفا برای زیباتر نشان دادن نتیجه است)

موفق باشید

Farad-13
دوشنبه 01 آبان 1391, 14:52 عصر
.چطوری می شه رشته rcOnlyWordsAndNums طوری تعیین کرد که اعداد فقط آخر رشته تکرار بشن. مثل: qwfhuodx356 سلام علیکم
دوباره تابع پست 2 را بررسی کنید (بعد از انتخاب نوع rcOnlyWordsAndNums رشته عددی بعد از رشته کاراکتری قرار میگیرد)

درود
موقعی که نوع rcOnlyWordsAndNums رو انتخاب می کنم؛ اعداد در اول و وسط رشته هم تکرار می شه
ولی من می خوام اعداد فقط در آخر رشته وجود داشته باشه.
94234

----------------------------------------------------

("XXX-", rcOnlyWords, 10, True) <<< درباره چگونگی استفاده از رشته بیشتر توضیح بدین توضیح خاصی نداره، تنها رشته ثابت مورد نظر را در آرگومان اول قرار دهید (علامت منهای جوی رشته XXX صرفا برای زیباتر نشان دادن نتیجه است)

مثلا اگه بخوام در یک تکست باکس بجای XXX- مقدار قرار بدم و این مقدار در رشته بکار بردن بشه باید چکار کنم؟
94236

محسن واژدی
دوشنبه 01 آبان 1391, 20:29 عصر
درود
موقعی که نوع rcOnlyWordsAndNums رو انتخاب می کنم؛ اعداد در اول و وسط رشته هم تکرار می شه
ولی من می خوام اعداد فقط در آخر رشته وجود داشته باشه.

سلام علیکم
بله، دوباره تابع پست 2 را بررسی کنید (بعد از انتخاب نوع rcOnlyWordsAndNums رشته عددی بعد از رشته کاراکتری قرار میگیرد) کد ویرایش شده جدید ضمیمه پست2 شده



مثلا اگه بخوام در یک تکست باکس بجای XXX- مقدار قرار بدم و این مقدار در رشته بکار بردن بشه باید چکار کنم؟

بجای XXX نام Text-Box جایگزین کنید به عنوان مثال:

RandomChars (Text1.Text, rcOnlyWordsAndNums , 10, True)


موفق باشید