יצירת קוד קופון רנדומלי חד-חד ערכי ב C#

מנסה את מזלי

משתמש מקצוען
יצא למישהו אולי ליצור קוד לקופון חד-חד ערכי(ה קוד הוא ה PK של הטבלה ) בין 8 ל 10 תווים(אותיות גודלות באנגלית ומספרים)
ב C#
יש למישהו רעיון איך ליצור כזה דבר ?
 

אתי1234

משתמש פעיל
יצא למישהו אולי ליצור קוד לקופון חד-חד ערכי(ה קוד הוא ה PK של הטבלה ) בין 8 ל 10 תווים(אותיות גודלות באנגלית ומספרים)
ב C#
יש למישהו רעיון איך ליצור כזה דבר ?

את צריכה שזה יהיה מספרים עוקבים?
כי אם לא נראה לי שהכי פשוט זה לרנדמל קוד
ולבדוק כל פעם אם עדיין לא קיים קוד כזה.
 

UU

משתמש סופר מקצוען
הנדסת תוכנה
את צריכה שזה יהיה מספרים עוקבים?
כי אם לא נראה לי שהכי פשוט זה לרנדמל קוד
ולבדוק כל פעם אם עדיין לא קיים קוד כזה.
עשיתי את זה בדיוק בעבר
לא ב-C#, אבל לא משנה
וזה גם לא היה ה-PK של הטבלה (נראה לי זה לא נכון עקרונית, ל-PK מומלץ מספר רץ)
והיו לי כ"כ הרבה כניסות לקוד שהצליחו ליצור 3 פעמים את אותו קוד בדיוק! (לא רנדומלי בדיוק, רק חלקית)
שימי לב שצריך לייצר איזה טרנזקציה לסגירת הטבלה לשינויים בזמן הבדיקה כדי למנוע מצב של כפילות בקוד.
 

מנסה את מזלי

משתמש מקצוען
זהו, עכשיו החלטתי ומאתי קוד שמביא לי קוד רנדומאלי
וכתבתי רקורסיה שבודקת אם הוא קיים או לא, ואם כן הולכת לייצר חדש
תודה..
 

קרן שמש

משתמש סופר מקצוען
יצא למישהו אולי ליצור קוד לקופון חד-חד ערכי(ה קוד הוא ה PK של הטבלה ) בין 8 ל 10 תווים(אותיות גודלות באנגלית ומספרים)
ב C#
יש למישהו רעיון איך ליצור כזה דבר ?
למה לא GUID ב C#
נקרא uniqueidentifer ב sql?
אנחנו הרבה פעמים משתמשים בו לPK של טבלאות
 

קרן שמש

משתמש סופר מקצוען
חשבתי עלזה , אבל ,זה לא אורך של 4*4 ?
אני צריכה מקסימום 8-10 תווים ופחדתי לחתוך את ה GUID באמצע שאז זה יכול ליצור כפילויות
אה, סורי. חשבתי שהתכוונת לפחות 8 או 10 תווים.
זה הרבה יותר מ16, זה אורך של 36 תווים.
אם תחתכי זה באמת יכול ליצור כפילויות, אבל אולי תוכלי להשתמש בזה במקום הקוד שמביא לך רנדומלי, ולוודא שלא קיים כבר בטבלה. פשוט יותר קצר ונקי.
ותוודאי שמספר הרשומות בטבלה לא יעבור בעתיד את מספר האופציות שיש ב10 תווים.
 

mirist

משתמש פעיל
יש אפשרות לעבוד הפוך-
להכניס את שורת הנתונים לטבלה שמוגדרת מראש באופן כזה שיוצרת את Identity אוטומטי (בשדה PK )
ואז לשלוף את המספר שנוצר אוטומטית. זה מוודא באופן בטוח שהמספר אינו כפול.
ניתן בשליפה גם לרפד ב0 במקרה שאת רוצה 8 ספרות ולא 1.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
אני מציע כמו מה שהציעו מעלי, אבל הIDENTITY לא יהיה הPK, מאחר ואת רוצה 8 תווים,
אלא הוא יהיה שדה שירוץ עליו גיבוב (hash) כלשהו
להן דוגמה לגיבוב של התו '0':
Convert.ToBase64String((System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes("0"))))
כמובן שלצורך השמירה עשיתי toBase64

אבל בלי קשר לכל מה שהוצע כאן, למה להשתמש בGUID ולחתוך אותו באמצע, הסיכוי שתצא לך את אותה תוצאה הוא באופן כללי כמו הסיכוי שגיבוב של 8~16 בתים יחזיר לך את אותה תוצאה עבור 2 קלטים שונים, וכמובן שזה קורה וגיבוב כזה נחשב גיבוב מאוד חלש, אבל זאת הסיבה שלא עושים ערך חד חד ערכי מ8 תווים.

עיין\ני עוד בערך MD5 ולמה כבר לא משתמשים בו בתור אמצעי אבטחה.

אם לא צריך להיות מדובר באמצעי אבטחה כלשהו, אז לא אמורה להיות בעיה סתם לייצר תווים בסדר עולה עם padding, ואז זה חד חד ערכי לכל דבר ועניין.
 

devMode

משתמש פעיל
אני הייתי משתמש בגיבוב של חותמת הזמן הנוכחי, כך אין סיכוי בעולם שיהיה גיבוב זהה, וזה יחסוך את הצורך ברקורסיה
 

מנסה את מזלי

משתמש מקצוען
תודה למגיבות...

פשוט קוראת לאותה פונקציה = רקורסיה , לא?
במידה וקיים כבר כזה קוד , שולחת ליצור עוד אחד .. ולבדוק
public static bool IsCodeExits(string code)
{;
utbl_coupon coupon = check in db if this code exists
// if (coupon == null)
{
return false;
}
else
{
code = CreateRandomCode();
return IsCodeExits(code);
}
}
 

מבקשת מידע

משתמש מקצוען
בצורה שזה כתוב זה אכן רקורסיה,
אפשר לכתוב את זה בלי פונקציה, יותר קצר, ובלי רקורסיה

קוד:
utbl_coupon coupon;
do
{
code = CreateRandomCode();
coupon = check in db if this code exists;
}
while (coupon != null)
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קיט ר'

קנג רְאֵה עָנְיִי וְחַלְּצֵנִי כִּי תוֹרָתְךָ לֹא שָׁכָחְתִּי:קנד רִיבָה רִיבִי וּגְאָלֵנִי לְאִמְרָתְךָ חַיֵּנִי:קנה רָחוֹק מֵרְשָׁעִים יְשׁוּעָה כִּי חֻקֶּיךָ לֹא דָרָשׁוּ:קנו רַחֲמֶיךָ רַבִּים יְהוָה כְּמִשְׁפָּטֶיךָ חַיֵּנִי:קנז רַבִּים רֹדְפַי וְצָרָי מֵעֵדְוֹתֶיךָ לֹא נָטִיתִי:קנח רָאִיתִי בֹגְדִים וָאֶתְקוֹטָטָה אֲשֶׁר אִמְרָתְךָ לֹא שָׁמָרוּ:קנט רְאֵה כִּי פִקּוּדֶיךָ אָהָבְתִּי יְהוָה כְּחַסְדְּךָ חַיֵּנִי:קס רֹאשׁ דְּבָרְךָ אֱמֶת וּלְעוֹלָם כָּל מִשְׁפַּט צִדְקֶךָ:
נקרא  7  פעמים

לוח מודעות

למעלה