github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/vin-code/vin_code.go (about) 1 package vincode 2 3 import ( 4 "strings" 5 6 "github.com/artisanhe/tools/vin-code/misc" 7 ) 8 9 // 专业术语(Technical Terms) 10 // VIN = "车辆识别代号(vehicle identification number)" 11 // WMI = "世界制造厂识别代号(world manufacturer identifier)" 12 // VDS = "车辆说明部分(vehicle descriptor section)" 13 // VIS = "车辆指示部分(vehicle indicator section)" 14 15 func vinUnmarshal(vin string) (VINData, error) { 16 //vinData := VINData{} 17 //country := misc.GetVINCountry(vin) 18 mfrs := misc.GetVINManuf(vin) 19 switch { 20 case strings.Contains(mfrs, "Mitsubishi"): 21 // 三菱2017 22 msbsVIN := MSBSVINCode(vin) 23 return ParseAll(msbsVIN) 24 case strings.Contains(mfrs, "Volvo"): 25 // 沃尔沃 26 volVIN := VOLVOVINCode(vin) 27 return ParseAll(volVIN) 28 default: 29 // check digit 30 if err := VINValidator(vin, true); err != nil { 31 vinData := VINData{} 32 return vinData, err 33 } 34 generalVIN := GeneralVINCode(vin) 35 return ParseAll(generalVIN) 36 } 37 } 38 39 func VINUnmarshal(vinStr string) (VINData, error) { 40 vin := strings.ToUpper(vinStr) 41 if err := VINValidator(vin, false); err != nil { 42 vinData := VINData{} 43 return vinData, err 44 } 45 return vinUnmarshal(vin) 46 }