הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   בדיקת חוקיות ת.ז | בדיקת ספרת ביקורת | ת.ז רנדומאלי (https://hosts.co.il/forums/showthread.php?t=96730)

iniKey.com 15-04-12 14:38

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

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

PHP קוד:

<?php

/**
 * Build By: iniKey.com.
 * Developed by: Roy.
*/

$new rand(10000000,99999999);

echo 
"<h1>Check Digit for '04722172'</h1><br />".CheckDigit("04722172");
echo 
"<h1>Valid if ID is right by Digit ('047221726')</h1><br />".ValidID("047221726");
echo 
"<h1>Generation a new ID</h1>".$new.CheckDigit("{$new}");

function 
ValidID($id) {
    if(
strlen($id) == && CheckDigit(substr($id08)) == $id[8])
        return 
TRUE;
    else
        return 
FALSE;
}

function 
CheckDigit($id) {
    for(
$i 0$i strlen($id); $i++)
        if(
$i != 0)
            
$Sum .= $id[$i] * 2;
        else
            
$Sum .= $id[$i];

    for(
$i 0$i <= strlen($Sum)-1$i++)
        
$Digit $Digit $Sum[$i];

    return ( 
$Digit 10 10 - ($Digit 10) : 0);
}
?>


איציק ברבי 15-04-12 17:04

נחמד,
זה יכול להועיל בכמות תהליכים מסויימת..
מאיפה הבאת את האלגוריתם של הת.ז?

iniKey.com 15-04-12 17:10

האתר של משרד הפנים :) האלגוריתם של הספרת ביקורת זה מכפלת של המספרים במשקל שלהם שזה מספר ראשון x1 מספר שני x2 מספר שלישי x1 מספר רביעי x2......
ואחרי זה לחבר את כל הספרות שיצאו... נגיד קיבלת 19 אז מה המספר שמעגילים כלפי מעלה? 20 אז 20-19 זה 1...

Shay Ben Moshe 15-04-12 19:34

אני מתנצל אבל מה זה המימוש המוזר הזה של CheckDigit? אתה בוא בונה string בשם Sum שמורכב משרשור מספרים ואז סוכם אותו? למה לא לסכום מראש? גם יותר קצר וגם הרבה יותר הגיוני.

iniKey.com 15-04-12 19:41

ציטוט:

נכתב במקור על ידי Shay Falador (פרסם 841524)
אני מתנצל אבל מה זה המימוש המוזר הזה של CheckDigit? אתה בוא בונה string בשם Sum שמורכב משרשור מספרים ואז סוכם אותו? למה לא לסכום מראש? גם יותר קצר וגם הרבה יותר הגיוני.

א. לא מחברים את הכפולות, מחברים את הספרות.
ב. שתבינו את האלגוריתם של זה.

Haimz 15-04-12 21:37

בתור אחד שיצא לו לבנות פונקצייה כזו, יש לך שם כמה דברים מיותרים,
אפשר לחסוך ולקצר לפונקצייה אחת, שניהם מיותרות.
שכחת להוסיף אפסים אם מספר הספרות קטן מ-9,
וגם כשיוצא לך לעבוד הוספת למשתנים, הכוונה לשימוש באופרטור .= , תצור משתנה ותגדיר לו ערך ריק, כמו NULL או משהו אחר, לא חסר ;)
עם זאת, יש עוד כמה דברים מיותרים, אבל אני קצת ממהר

בכל מקרה, כל הכבוד על השיתוף :)

iniKey.com 15-04-12 21:42

ציטוט:

נכתב במקור על ידי HHaim (פרסם 841544)
בתור אחד שיצא לו לבנות פונקצייה כזו, יש לך שם כמה דברים מיותרים,
אפשר לחסוך ולקצר לפונקצייה אחת, שניהם מיותרות.
שכחת להוסיף אפסים אם מספר הספרות קטן מ-9,
וגם כשיוצא לך לעבוד הוספת למשתנים, הכוונה לשימוש באופרטור .= , תצור משתנה ותגדיר לו ערך ריק, כמו NULL או משהו אחר, לא חסר ;)
עם זאת, יש עוד כמה דברים מיותרים, אבל אני קצת ממהר

בכל מקרה, כל הכבוד על השיתוף :)

תודה רבה על תגובתך.
בPHP 5 ומעלה כבר לא צריכים להגדיר את המשתנה ולאפס אותו, אפשר ישר לעשות לו .=...

אשמח לדעת על עוד דברים :)

Haimz 15-04-12 21:54

ציטוט:

נכתב במקור על ידי iniKey.com (פרסם 841546)
תודה רבה על תגובתך.
בPHP 5 ומעלה כבר לא צריכים להגדיר את המשתנה ולאפס אותו, אפשר ישר לעשות לו .=...

אשמח לדעת על עוד דברים :)

(מהגלאקסי)
כן אבל זה רק משום שיש ערך קבוע לerror reporting

iniKey.com 15-04-12 21:58

ציטוט:

נכתב במקור על ידי HHaim (פרסם 841548)
(מהגלאקסי)
כן אבל זה רק משום שיש ערך קבוע לerror reporting

ברירת מחדל, ERROR REPORTING זה E_ALL ^ DEFALT (נראלי משהו כזה).
אם לא נוגעים בזה שום שגיאה לא תווצר.

Haimz 15-04-12 22:06

ציטוט:

נכתב במקור על ידי iniKey.com (פרסם 841550)
ברירת מחדל, ERROR REPORTING זה E_ALL ^ DEFALT (נראלי משהו כזה).
אם לא נוגעים בזה שום שגיאה לא תווצר.

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

(ברירת המחדל היא: e_all ^ e_notice


כל הזמנים הם GMT +2. הזמן כעת הוא 06:10.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ