/** * Test that luhn() returns true if a number passes the luhn algorithm. */ public function testLuhn() { $this->assertTrue(Validate::luhn('370482756063980')); // American Express $this->assertTrue(Validate::luhn('5610745867413420')); // BankCard $this->assertTrue(Validate::luhn('30155483651028')); // Diners Club 14 $this->assertTrue(Validate::luhn('36747701998969')); // 2004 MasterCard/Diners Club Alliance International 14 $this->assertTrue(Validate::luhn('5597511346169950')); // 2004 MasterCard/Diners Club Alliance US & Canada 16 $this->assertTrue(Validate::luhn('6011802876467237')); // Discover $this->assertTrue(Validate::luhn('201496944158937')); // enRoute $this->assertTrue(Validate::luhn('210034762247893')); // JCB 15 digit $this->assertTrue(Validate::luhn('3096806857839939')); // JCB 16 digit $this->assertTrue(Validate::luhn('5020147409985219')); // Maestro (debit card) $this->assertTrue(Validate::luhn('5580424361774366')); // Mastercard $this->assertTrue(Validate::luhn('6767432107064987')); // Solo 16 $this->assertTrue(Validate::luhn('676714834398858593')); // Solo 18 $this->assertTrue(Validate::luhn('6767838565218340113')); // Solo 19 $this->assertTrue(Validate::luhn('5641829171515733')); // Switch 16 $this->assertTrue(Validate::luhn('493622764224625174')); // Switch 18 $this->assertTrue(Validate::luhn('6759603460617628716')); // Switch 19 $this->assertTrue(Validate::luhn('4024007174754')); // VISA 13 digit $this->assertTrue(Validate::luhn('4916375389940009')); // VISA 16 digit $this->assertTrue(Validate::luhn('4175003346287100')); // Visa Electron $this->assertTrue(Validate::luhn('869940697287073')); // Voyager $this->assertFalse(Validate::luhn('0000000000000000')); $this->assertFalse(Validate::luhn('869940697287173')); }