Complex PHP code for checking the validity of VINs (vehicle identification numbers). It also returns the check digit of each VIN number.
1. <?php
2. $VinNum = "WDBVG78J38A002076";
3. if(strlen($VinNum) != "17")
4. {
5. echo "The number of characters you have entered (".strlen($VinNum).") does not match a valid VIN number.";
6. exit;
7. }
8.
9. $VinNum = strtoupper($VinNum);
10. $Model = array("A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "W", "X", "Y");
11. $Weight = array("8", "7", "6", "5", "4", "3", "2", "10", "9", "8", "7", "6", "5", "4", "3", "2");
12. $Char = array("A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
13. $CharVals = array("1", "2", "3", "4", "5", "6", "7", "8", "1", "2", "3", "4", "5", "7", "9", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
14. $VinChars = array();
15.
16. $Counter = 0;
17. foreach ($Char as $CurrChar)
18. {
19. $VinChars[$CurrChar] = $CharVals[$Counter];
20. $Counter++;
21. }
22.
23. $CheckDigits = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X");
24. $Counter = 0;
25. $VinArray = array();
26. for ($i = 0; $i < 17; $i++)
27. {
28. if ($i!=8)
29. {
30. $VinArray[$Counter] = substr($VinNum, $i, 1);
31. $Counter++;
32. }
33. }
34.
35. $Total = 0;
36. for($i = 0; $i < 16; $i++)
37. {
38. $ThisDigit = $VinArray[$i];
39. $ThisTotal = $Weight[$i] * $VinChars[$ThisDigit];
40. $Total = $Total + $ThisTotal;
41. }
42.
43. $Remainder = fmod($Total, 11);
44. if (substr($VinNum, 8, 1)!= $CheckDigits[$Remainder])
45. {
46. echo "VIN number is not valid.<br />";
47. }
48. else
49. {
50. echo "VIN number is valid.<br />";
51. }
52. echo "Computed check digit: ".$CheckDigits[$Remainder]."<br />";
53. echo "Your check digit: ".substr($VinNum, 8, 1);
54. ?>