Packages
pillar
0.2.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.1
0.34.0
0.33.1
0.33.0
0.32.0
0.31.0
0.30.0
0.29.1
0.29.0
0.28.0
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
Elixir client for ClickHouse, a fast open-source Online Analytical Processing (OLAP) database management system.
Current section
Files
Jump to
Current section
Files
lib/vin_decode/validation.ex
defmodule VinDecode.Validation do
@weights %{
0 => 8,
1 => 7,
2 => 6,
3 => 5,
4 => 4,
5 => 3,
6 => 2,
7 => 10,
8 => 0,
9 => 9,
10 => 8,
11 => 7,
12 => 6,
13 => 5,
14 => 4,
15 => 3,
16 => 2
}
@transliterating %{
"A" => 1,
"B" => 2,
"C" => 3,
"D" => 4,
"E" => 5,
"F" => 6,
"G" => 7,
"H" => 8,
"J" => 1,
"K" => 2,
"L" => 3,
"M" => 4,
"N" => 5,
"P" => 7,
"R" => 9,
"S" => 2,
"T" => 3,
"U" => 4,
"V" => 5,
"W" => 6,
"X" => 7,
"Y" => 8,
"Z" => 9,
"1" => 1,
"2" => 2,
"3" => 3,
"4" => 4,
"5" => 5,
"6" => 6,
"7" => 7,
"8" => 8,
"9" => 9,
"0" => 0
}
def valid?(vin) do
product =
vin
|> String.codepoints()
|> Enum.with_index()
|> Enum.map(fn {char, index} -> transliterating(char) * weight(index) end)
|> Enum.sum()
char9 = String.at(vin, 8)
char9 == check_digit(product)
end
defp transliterating(char) do
@transliterating[char]
end
defp check_digit(product_result) do
mod = Kernel.ceil(:math.fmod(product_result, 11))
if mod == 10 do
"X"
else
to_string(mod)
end
end
defp weight(position) do
@weights[position]
end
end