<?php
$card
=
"4567 1234 5678 9101"
;
$exp
=
"06/11"
;
echo
"Validating: $card : $exp<br>"
;
$result
= PIPHP_ValidateCC(
$card
,
$exp
);
if
(
$result
!= FALSE)
echo
"Card Validated"
;
else
echo
"Card did not validate"
;
function
PIPHP_ValidateCC(
$number
,
$expiry
)
{
$number
= preg_replace(
'/[^\d]/'
,
''
,
$number
);
$expiry
= preg_replace(
'/[^\d]/'
,
''
,
$expiry
);
$left
=
substr
(
$number
, 0, 4);
$cclen
=
strlen
(
$number
);
$chksum
= 0;
if
((
$left
>= 3000) && (
$left
<= 3059) ||
(
$left
>= 3600) && (
$left
<= 3699) ||
(
$left
>= 3800) && (
$left
<= 3889))
if
(
$cclen
!= 14)
return
FALSE;
if
((
$left
>= 3088) && (
$left
<= 3094) ||
(
$left
>= 3096) && (
$left
<= 3102) ||
(
$left
>= 3112) && (
$left
<= 3120) ||
(
$left
>= 3158) && (
$left
<= 3159) ||
(
$left
>= 3337) && (
$left
<= 3349) ||
(
$left
>= 3528) && (
$left
<= 3589))
if
(
$cclen
!= 16)
return
FALSE;
elseif
((
$left
>= 3400) && (
$left
<= 3499) ||
(
$left
>= 3700) && (
$left
<= 3799))
if
(
$cclen
!= 15)
return
FALSE;
elseif
((
$left
>= 3890) && (
$left
<= 3899))
if
(
$cclen
!= 14)
return
FALSE;
elseif
((
$left
>= 4000) && (
$left
<= 4999))
if
(
$cclen
!= 13 &&
$cclen
!= 16)
return
FALSE;
elseif
((
$left
>= 5100) && (
$left
<= 5599))
if
(
$cclen
!= 16)
return
FALSE;
elseif
(
$left
== 5610)
if
(
$cclen
!= 16)
return
FALSE;
elseif
(
$left
== 6011)
if
(
$cclen
!= 16)
return
FALSE;
else
return
FALSE;
for
(
$j
= 1 - (
$cclen
% 2);
$j
<
$cclen
;
$j
+= 2)
$chksum
+=
substr
(
$number
,
$j
, 1);
for
(
$j
=
$cclen
% 2;
$j
<
$cclen
;
$j
+= 2)
{
$d
=
substr
(
$number
,
$j
, 1) * 2;
$chksum
+=
$d
< 10 ?
$d
:
$d
- 9;
}
if
(
$chksum
% 10 != 0)
return
FALSE;
if
(
mktime
(0, 0, 0,
substr
(
$expiry
, 0, 2),
date
(
"t"
),
substr
(
$expiry
, 2, 2)) < time())
return
FALSE;
return
TRUE;
}
?>