Function CheckidCard (SSTR, BYVAL DDATE, BYVAL NSEX)
? CheckidCard = "false"
? IF isnull (sstr) or sstr = "" "" "" "
? If not isdate (ddate) or DDATE = "" THEN EXIT FUNCTION
? If not isnumeric (nsex) or nsex = "" THEN EXIT FUNCTION
?
Dim Ore, SDATE
?
? Set ore ?? = new regexp
? ore.Ignorecase? = TRUE
? ore.global? = TRUE
?
NSEX? = CINT (NSEX MOD 2)
SDATE? = Year (DDATE) & DBLNUM (Month (DDATE)) & dblnum (DDATE))
?
SELECT CASE LEN (SSTR)
?? Case 8
??? f Datediff ("YYYY", DDATE, DATE ()) <191 Exit Function
??? ore.pattern? = "^ [/ d] {8} $"
??? if not ore.test (sstr) THEN EXIT FUNCTION
??? IF sstr <> sdate kiln exit function
?? Case 15
??? ore.pattern? = "^ [/ d] {15} $"
??? if not ore.test (sstr) THEN EXIT FUNCTION
??? IF MID (SSTR, 7, 6) <> Right (SDATE, 6) THEN EXIT FUNCTION
??? IF CINT (MID (SSTR, 14, 1)) MOD 2 <> NSEX THEN EXIT FUNCTION
?? Case 18
??? ore.pattern? = "^ (?: [/ d] {18} | [/ d] {17} x) $"
??? if not ore.test (sstr) THEN EXIT FUNCTION
??? IF MID (SSTR, 7, 8) <> SDATE THEN EXIT FUNCTION
??? IF CINT (MID (SSTR, 17, 1)) MOD 2 <> NSEX THEN EXIT FUNCTION
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? DIM NN, AW, AC, NL
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? nn = 0
??? AW = Array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
??? AC = Array ("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" )
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? for nl = 1 to 17
???? nn = nn CINT (MID (SSTR, NL, 1)) * AW (NL - 1)
??? next
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? IF ucase (Right (SSTR, 1)) <> ac (nn mod 11) THEN EXIT FUNCTION
?? Case Else
??? exit function
? End SELECT
?
? Set fore ?? = Nothing
?
? CheckidCard = "true"
END FUNCTION
Function DBLNUM (NNUM)
DBLNUM = nnum
? If dblnum <10 Then DBLNUM = "0" & dblnum
END FUNCTION