Index: includes/handlers/gateways/pay_method_gateway.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/pay/includes/handlers/gateways/pay_method_gateway.inc,v
retrieving revision 1.18
diff -u -r1.18 pay_method_gateway.inc
--- includes/handlers/gateways/pay_method_gateway.inc	22 Sep 2010 17:23:08 -0000	1.18
+++ includes/handlers/gateways/pay_method_gateway.inc	27 Sep 2010 06:14:12 -0000
@@ -129,10 +129,30 @@
   }
 
   function cc_number_validate() {
-    if ((strlen($this->cc_number) < 13) || (strlen($this->cc_number) > 19)) {
+    $number = $this->cc_number;
+
+    if ((strlen($number) < 13) || (strlen($number) > 19)) {
       $this->error_message = t('Invalid credit card number.');
       return FALSE;
     }
+
+    // Mod-10 credit card validation.
+    for ($i = 0; $i < strlen($number); $i++) {
+      $digit = substr($number, $i, 1);
+      if ((strlen($number) - $i - 1) % 2) {
+        $digit *= 2;
+        if ($digit > 9) {
+          $digit -= 9;
+        }
+      }
+      $total += $digit;
+    }
+
+    if ($total % 10 != 0) {
+      $this->error_message = t('Invalid credit card number.');
+      return FALSE;
+    }
+
     return TRUE;
   }
 
