ארכיון יומי: 13 אפריל, 2009

ספריית קוד פתוח לטיפול בכרטיסי אשראי

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

מה הכוונה ? מספר כרטיס האשראי שברשותכם אינו מספר שרירותי (או עוקב) שנקבע עבורכם, אלא הוא מכיל כמה כללים:

  1. מקדם קבוע (או קבוצה של מקדמים, כלומר הוא לא סתם יתחיל בספרה 30 למשל)
  2. אורך קבוע (נגיד 16 ספרות או 13 ספרות)
  3. סיכום מספרים קבוע (בד"כ אם כי לא מחייב, אלגוריתם luhn -> אותו אלגוריתם של מספר תעודת הזהות הישראלית, רק מספר תעודת הזהות הישראלית שינתה חוק אחד באלגוריתם)
  4. ספרות ביקרות לבדוק האם הכרטיס נמצא ליידכם (אני לא חושב שזו בדיקה טובה, כי אפשר לרשום אותם כמו שאפשר לרשום את המספר כרטיס אשראי שלכם), אשר בנויות על אלגוריתם שדורש יותר מידי עבודה ממה שאני מוכן להשקיע לבד, אבל אם יתרמו לי קוד שעושה בדיקה, אז אוסיף אותו לספרייה

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

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

כרטיסי האשראי שהכנסתי להם חוקים לספרייה כרגע הם: להמשיך לקרוא