25-11-2013, 23:45
|
|
מנהל משבראש, בלשנות, תכנות ויהדות
|
|
חבר מתאריך: 04.06.06
הודעות: 33,130
|
|
|
לולאה אחת שרצה על הספרות, עדיף מהסוף להתחלה, ושסוכמת כפולות שלהן ב־1 וב־2 לסירוגין.
אם id הוא מספר תעודת הזהות, באורך של 9 ספרות ומטה, אז אפשר לבצע את הלולאה כך:
קוד PHP:
sum = 0, weight = 1;
while ( id ) {
sum += DigitSum( weight * ( id % 10 ) );
id /= 10;
weight = 3 - weight;
}
return !( sum % 10 );
כאשר הפונקציה הנפרדת DigitSum סוכמת ספרות של מספר (לשם המודולריות).
אפשר להחליף אותה פשוט ב־n%10+n/10, כי מדובר לכל היותר במספרים בעלי זוג ספרות.
עריכה: עוד מקרה של תגובה שנותרה בטאב פתוח, ונשלחה לאחר שמישהו אחר כבר ענה, נכנס לסטטיסטיקה..
נערך לאחרונה ע"י ShoobyD בתאריך 25-11-2013 בשעה 23:55.
|