• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

php חיבור מספרים וכו'

מתוזמן נעוץ נעול הועבר ארכיון code613m
5 פוסטים 3 כותבים 360 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • C מנותק
    C מנותק
    chaim1989
    כתב ב נערך לאחרונה על ידי
    #1

    שלום וברכה
    אני מקבל ממרכזייה ערך של תוקף כרטיס אשראי נגיד 0517
    בשביל לשדר לחברת אשראי אני צריך שיהיה 1705
    אני מסתבך ומסתבך במשהו שמתכנתי PHP יתנו לי פתרון מיידי
    הוא כאילו מתייחס למשתנה כInt על אף שאני רוצה שיהיה string ניסיתי כמה פתרונות קלאסיים ועדיין אני מסתבך

    $cctokef =0517;
    
    		$cctokef1= strval(substr("$ccnewtokef", 2, 4));
    		$cctokef2=  strval(substr("$ccnewtokef", 0, 2));
        print $cctokef1 . $cctokef2;
    

    פורסם במקור בפורום CODE613 ב16/06/2014 23:07 (+03:00)

    תגובה 1 תגובה אחרונה
    0
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #2

    הקוד שלך שגוי קצת:
    א. מרכאות סביב משתנה זבה פשוט מחרוזת במקום פניה למשתנה,
    ב. הstrval אם צריך אותו בכלל (לדעתי לא צריך כי זה משתמע ממילא) לא נמצא במקום הנכון.
    ג. המשתנה הראשון לא מכיל את האפס, כי הוא int כך שלאחר המרה אתה עם 751 במקום 517.
    ד. ccnewtokef לא ידוע לנו מהו ומאיפה בא.

    אבל באמת יש בעיה גם בלי כל זה.
    כשאני מנסה בPHP לכתוב ככה:

    print 0517;
    

    וזה מחזיר 335!
    ההסבר המעצבן הוא שערך שמתחיל באפס מתורגם למספר אוקטלי, טוב אז תזין בלי אפס.

    למעשה, הכי קל לכאורה לקבל את המספר ישירות בסטרינג:

    $cctokef = "0517";
     
    $cctokef1 =  substr($cctokef, 2, 4);
    $cctokef2 =  substr($cctokef, 0, 2);
    print $cctokef1 . $cctokef2;
    
    1. או להישאר עם int ולהחליף את הסדר ע"י קוד כזה:
      ערך א = 0517
      ערך ב = (ערך א / 100) + ( (ערך א % 100) * 100)

      $cctokef = 517;

      print (int)($cctokef / 100) + (($cctokef % 100) * 100);
      רק שאז תהיה בעיה עם האפס במקרה שהקלט כזה: 1705 שזה מחזיר 517 במקום 0517. בשביל זה ניתן להשתמש בפונקציות פורמט, מצאתי לדוגמה פונקציית str_pad היא מקבלת סטרינג ומוסיפה ("מרפדת") לו תו מוביל במספר המתבקש:

      $cctokef = 1705;

      $cctokef = ($cctokef / 100) + (($cctokef % 100) * 100);
      print str_pad((int)$cctokef, 4, '0', STR_PAD_LEFT);

    פורסם במקור בפורום CODE613 ב17/06/2014 12:16 (+03:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • C מנותק
    C מנותק
    chaim1989
    כתב ב נערך לאחרונה על ידי
    #3

    הבעיה היא שמה שכתבת עובד ב1705 להפוך ל0517 אבל לא עובד ההיפך ואני צריך ההיפך כי הלקוח מקיש כמו שמופיע על הכרטיס אשראי ואני צריך להפוך את זה

    פורסם במקור בפורום CODE613 ב17/06/2014 14:12 (+03:00)

    תגובה 1 תגובה אחרונה
    0
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #4

    כתבתי לך להשמיט את האפס, ככה:

    $cctokef = 517;
      
    $cctokef = ($cctokef / 100) + (($cctokef % 100) * 100);
    print str_pad((int)$cctokef, 4, '0', STR_PAD_LEFT);
    

    או לקבל כסטרינג מתחילה, אחרת לא הצלחתי.

    פורסם במקור בפורום CODE613 ב17/06/2014 15:43 (+03:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • K מנותק
    K מנותק
    kingyes
    כתב ב נערך לאחרונה על ידי
    #5

    דוד - הפתרון שנתת אכן טוב (זה מה שאני הייתי עושה גם).
    בכל אופן, למה אתה ממיר את הקלט ל-int ואז עושה לך תרגיל ואז שוב מחזיר אותו עם 0 בהתחלה?

    אתה יכול ישירות לעבוד עם ה-str_pad() ולסגור את הפינה הזאת (תכניס אותו כ-string מלכתחילה).

    פורסם במקור בפורום CODE613 ב17/06/2014 23:14 (+03:00)

    תגובה 1 תגובה אחרונה
    1

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.