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  }