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

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

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

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

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

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

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

  • MasterCard
  • Visa (13 and 16 in length)
  • Visa Electron
  • American Express
  • Diners Club Carte Blanche
  • Diners Club International
  • Diners Club US and Canada
  • Discover
  • JCB
  • Laser
  • Maestro
  • Solo
  • Switch
  • Isracard

הספרייה שלי משוחררת תחת רשיון LGPL, כך שניתן להשתמש בה גם בקוד סגור.

את קוד המקור ניתן למצוא כאן.

אפשר גם לקרוא מידע בwiki של הפרוייקט.

5 מחשבות על “ספריית קוד פתוח לטיפול בכרטיסי אשראי

  1. Boris Shtrasman

    עידו ( הבטחתי ומקיים ) יש משהוא קטן שחסר –
    יכולת התממשקות מול הסיפריה (משהוא שאיש C כמוני יוכל לעבוד איתו).
    מקריאת הפוסט לא העלת בדיקה blacklist (כלומר בנקים שניסגרו / כרטיסים גנובים וכו') האם זה מכוון ? (אתה מאמין שהבדיקות הינן בצד ששב"א )

  2. ik_5 מאת

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

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

    1. ik_5 מאת

      עד כמה שאני יודע אין הבדל, היות ויש מדינות כמו ארה"ב שעד כמה שאני יודע, אין קשר בין הבנק לבין חברת האשראי.

      שים לב שגם אין הבדל בין debit card לבין כרטיס אשראי רגיל.

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s