github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/vin-code/misc/vehicle_region.go (about)

     1  package misc
     2  
     3  // 洲名
     4  const (
     5  	AfricaStr       = "Africa"
     6  	AsiaStr         = "Asia"
     7  	EuropeStr       = "Europe"
     8  	NorthAmericaStr = "North America"
     9  	OceaniaStr      = "Oceania"
    10  	SouthAmericaStr = "South America"
    11  
    12  	ContinentUnknownStr = "Unknown continent"
    13  )
    14  
    15  // 国名
    16  const (
    17  	SouthAfricaNm    = "South Africa"
    18  	IvoryCoastNm     = "Ivory Coast"
    19  	AfricaNm         = "Africa"
    20  	AngolaNm         = "Angola"
    21  	KenyaNm          = "Kenya"
    22  	TanzaniaNm       = "Tanzania"
    23  	BeninNm          = "Benin"
    24  	MadagascarNm     = "Madagascar"
    25  	TunisiaNm        = "Tunisia"
    26  	EgyptNm          = "Egypt"
    27  	MoroccoNm        = "Morocco"
    28  	ZambiaNm         = "Zambia"
    29  	GhanaNm          = "Ghana"
    30  	MozambiqueNm     = "Mozambique"
    31  	NigeriaNm        = "Nigeria"
    32  	JapanNm          = "Japan"
    33  	SriLankaNm       = "SriLanka"
    34  	IsraelNm         = "Israel"
    35  	SKoreaNm         = "SKorea"
    36  	KazakhstanNm     = "Kazakhstan"
    37  	ChinaNm          = "China"
    38  	IndiaNm          = "India"
    39  	IndonesiaNm      = "Indonesia"
    40  	ThailandNm       = "Thailand"
    41  	IranNm           = "Iran"
    42  	PakistanNm       = "Pakistan"
    43  	TurkeyNm         = "Turkey"
    44  	PhilippinesNm    = "Philippines"
    45  	SingaporeNm      = "Singapore"
    46  	MalaysiaNm       = "Malaysia"
    47  	AsiaNm           = "Asia"
    48  	UAENm            = "UAE"
    49  	TaiwanNm         = "Taiwan"
    50  	VietnamNm        = "Vietnam"
    51  	SaudiArabiaNm    = "Saudi Arabia"
    52  	UnitedKingdomNm  = "United Kingdom"
    53  	EGermanyNm       = "EGermany"
    54  	PolandNm         = "Poland"
    55  	LatviaNm         = "Latvia"
    56  	SwitzerlandNm    = "Switzerland"
    57  	CzechRepNm       = "Czech Rep"
    58  	HungaryNm        = "Hungary"
    59  	PortugalNm       = "Portugal"
    60  	DenmarkNm        = "Denmark"
    61  	IrelandNm        = "Ireland"
    62  	RomaniaNm        = "Romania"
    63  	SlovakNm         = "Slovak"
    64  	AustriaNm        = "Austria"
    65  	FranceNm         = "France"
    66  	SpainNm          = "Spain"
    67  	SerbiaNm         = "Serbia"
    68  	CroatiaNm        = "Croatia"
    69  	EstoniaNm        = "Estonia"
    70  	GermanyNm        = "Germany"
    71  	BulgariaNm       = "Bulgaria"
    72  	GreeceNm         = "Greece"
    73  	NetherlandsNm    = "Netherlands"
    74  	USSRNm           = "USSR"
    75  	LuxembourgNm     = "Luxembourg"
    76  	RussiaNm         = "Russia"
    77  	BelgiumNm        = "Belgium"
    78  	FinlandNm        = "Finland"
    79  	MaltaNm          = "Malta"
    80  	SwedenNm         = "Sweden"
    81  	NorwayNm         = "Norway"
    82  	BelarusNm        = "Belarus"
    83  	UkraineNm        = "Ukraine"
    84  	ItalyNm          = "Italy"
    85  	SloveniaNm       = "Slovenia"
    86  	LithuaniaNm      = "Lithuania"
    87  	EuropeNm         = "Europe"
    88  	CanadaNm         = "Canada"
    89  	MexicoNm         = "Mexico"
    90  	UnitedStatesNm   = "UnitedStates"
    91  	AustraliaNm      = "Australia"
    92  	NewZealandNm     = "NewZealand"
    93  	OceaniaNm        = "Oceania"
    94  	ArgentinaNm      = "Argentina"
    95  	ChileNm          = "Chile"
    96  	EcuadorNm        = "Ecuador"
    97  	PeruNm           = "Peru"
    98  	VenezuelaNm      = "Venezuela"
    99  	SouthAmericaNm   = "SouthAmerica"
   100  	ColombiaNm       = "Colombia"
   101  	ParaguayNm       = "Paraguay"
   102  	UruguayNm        = "Uruguay"
   103  	TrinidadTobagoNm = "Trinidad & Tobago"
   104  	BrazilNm         = "Brazil"
   105  	SANm             = "SA"
   106  
   107  	CountryUnknownNm = "Unknown Country"
   108  )
   109  
   110  // 获取洲属
   111  func GetVINContinent(vin string) string {
   112  	r := vin[0]
   113  	switch {
   114  	case r >= 'A' && r <= 'H':
   115  		return AfricaStr
   116  	case r >= 'J' && r <= 'R':
   117  		return AsiaStr
   118  	case r >= 'S' && r <= 'Z':
   119  		return EuropeStr
   120  	case r >= '1' && r <= '5':
   121  		return NorthAmericaStr
   122  	case r >= '6' && r <= '7':
   123  		return OceaniaStr
   124  	case r == '8' || r == '9' || r == '0':
   125  		return SouthAmericaStr
   126  	default:
   127  		return ContinentUnknownStr
   128  	}
   129  }
   130  
   131  func GetAfricaCountry(vin string) string {
   132  	nm1 := vin[0]
   133  	nm2 := vin[1]
   134  	switch {
   135  	case nm1 == 'A' && (nm2 >= 'A' && nm2 <= 'H'):
   136  		return SouthAfricaNm
   137  	case nm1 == 'A' && (nm2 >= 'J' && nm2 <= 'N'):
   138  		return IvoryCoastNm
   139  	case nm1 == 'B' && (nm2 >= 'A' && nm2 <= 'E'):
   140  		return AngolaNm
   141  	case nm1 == 'C' && (nm2 >= 'A' && nm2 <= 'E'):
   142  		return BeninNm
   143  	case nm1 == 'D' && (nm2 >= 'A' && nm2 <= 'E'):
   144  		return EgyptNm
   145  	case nm1 == 'E' && (nm2 >= 'A' && nm2 <= 'E'):
   146  		return GhanaNm
   147  	case nm1 == 'F' && (nm2 >= 'A' && nm2 <= 'E'):
   148  		return IndiaNm
   149  	case nm1 == 'B' && (nm2 >= 'F' && nm2 <= 'K'):
   150  		return KenyaNm
   151  	case nm1 == 'C' && (nm2 >= 'F' && nm2 <= 'K'):
   152  		return MadagascarNm
   153  	case nm1 == 'D' && (nm2 >= 'F' && nm2 <= 'K'):
   154  		return MoroccoNm
   155  	case nm1 == 'E' && (nm2 >= 'F' && nm2 <= 'K'):
   156  		return MozambiqueNm
   157  	case nm1 == 'F' && (nm2 >= 'F' && nm2 <= 'K'):
   158  		return NigeriaNm
   159  	case nm1 == 'B' && (nm2 >= 'L' && nm2 <= 'R'):
   160  		return TanzaniaNm
   161  	case nm1 == 'C' && (nm2 >= 'L' && nm2 <= 'R'):
   162  		return TunisiaNm
   163  	case nm1 == 'D' && (nm2 >= 'L' && nm2 <= 'R'):
   164  		return ZambiaNm
   165  	default:
   166  		return AfricaNm
   167  	}
   168  }
   169  
   170  func GetAsiaCountry(vin string) string {
   171  	nm1 := vin[0]
   172  	nm2 := vin[1]
   173  	switch {
   174  	case nm1 == 'J':
   175  		return JapanNm
   176  	case nm1 == 'L':
   177  		return ChinaNm
   178  	case nm1 == 'K' && (nm2 >= 'A' && nm2 <= 'E'):
   179  		return SriLankaNm
   180  	case nm1 == 'M' && (nm2 >= 'A' && nm2 <= 'E'):
   181  		return IndiaNm
   182  	case nm1 == 'N' && (nm2 >= 'A' && nm2 <= 'E'):
   183  		return IranNm
   184  	case nm1 == 'P' && (nm2 >= 'A' && nm2 <= 'E'):
   185  		return PhilippinesNm
   186  	case nm1 == 'R' && (nm2 >= 'A' && nm2 <= 'E'):
   187  		return UAENm
   188  	case nm1 == 'K' && (nm2 >= 'F' && nm2 <= 'K'):
   189  		return IsraelNm
   190  	case nm1 == 'M' && (nm2 >= 'F' && nm2 <= 'K'):
   191  		return IndonesiaNm
   192  	case nm1 == 'N' && (nm2 >= 'F' && nm2 <= 'K'):
   193  		return PakistanNm
   194  	case nm1 == 'P' && (nm2 >= 'F' && nm2 <= 'K'):
   195  		return SingaporeNm
   196  	case nm1 == 'R' && (nm2 >= 'F' && nm2 <= 'K'):
   197  		return TaiwanNm
   198  	case nm1 == 'K' && (nm2 >= 'L' && nm2 <= 'R'):
   199  		return SKoreaNm
   200  	case nm1 == 'M' && (nm2 >= 'L' && nm2 <= 'R'):
   201  		return ThailandNm
   202  	case nm1 == 'N' && (nm2 >= 'L' && nm2 <= 'R'):
   203  		return TurkeyNm
   204  	case nm1 == 'P' && (nm2 >= 'L' && nm2 <= 'R'):
   205  		return MalaysiaNm
   206  	case nm1 == 'R' && (nm2 >= 'L' && nm2 <= 'R'):
   207  		return VietnamNm
   208  	case nm1 == 'R' && ((nm2 >= 'S' && nm2 <= 'Z') || (nm2 >= '0' && nm2 <= '9')):
   209  		return SaudiArabiaNm
   210  	default:
   211  		return AsiaNm
   212  	}
   213  }
   214  func GetEuropeCountry(vin string) string {
   215  	nm1 := vin[0]
   216  	nm2 := vin[1]
   217  	switch {
   218  	case nm1 == 'S' && (nm2 >= 'A' && nm2 <= 'M'):
   219  		return UnitedKingdomNm
   220  	case nm1 == 'S' && (nm2 >= 'N' && nm2 <= 'T'):
   221  		return EGermanyNm
   222  	case nm1 == 'S' && (nm2 >= 'U' && nm2 <= 'Z'):
   223  		return PolandNm
   224  	case nm1 == 'S' && (nm2 >= '1' && nm2 <= '4'):
   225  		return LatviaNm
   226  	case nm1 == 'T' && (nm2 >= 'A' && nm2 <= 'H'):
   227  		return SwitzerlandNm
   228  	case nm1 == 'T' && (nm2 >= 'J' && nm2 <= 'P'):
   229  		return CzechRepNm
   230  	case nm1 == 'T' && (nm2 >= 'R' && nm2 <= 'V'):
   231  		return HungaryNm
   232  	case nm1 == 'T' && ((nm2 >= 'W' && nm2 <= 'Z') || nm2 == '1'):
   233  		return PortugalNm
   234  	case nm1 == 'U' && (nm2 >= 'H' && nm2 <= 'M'):
   235  		return DenmarkNm
   236  	case nm1 == 'U' && (nm2 >= 'N' && nm2 <= 'T'):
   237  		return IrelandNm
   238  	case nm1 == 'U' && (nm2 >= 'U' && nm2 <= 'Z'):
   239  		return RomaniaNm
   240  	case nm1 == 'U' && (nm2 >= '5' && nm2 <= '7'):
   241  		return SlovakNm
   242  	case nm1 == 'V' && (nm2 >= 'A' && nm2 <= 'E'):
   243  		return SlovakNm
   244  	case nm1 == 'V' && (nm2 >= 'F' && nm2 <= 'R'):
   245  		return AustriaNm
   246  	case nm1 == 'V' && (nm2 >= 'F' && nm2 <= 'R'):
   247  		return FranceNm
   248  	case nm1 == 'V' && (nm2 >= 'S' && nm2 <= 'W'):
   249  		return SpainNm
   250  	case nm1 == 'V' && ((nm2 >= 'X' && nm2 <= 'Z') || (nm2 >= '1' || nm2 <= '2')):
   251  		return SerbiaNm
   252  	case nm1 == 'V' && (nm2 >= '3' && nm2 <= '5'):
   253  		return CroatiaNm
   254  	case nm1 == 'V' && ((nm2 >= '6' && nm2 <= '9') || (nm2 == '0')):
   255  		return EstoniaNm
   256  	case nm1 == 'W':
   257  		return GermanyNm
   258  	case nm1 == 'X' && (nm2 >= 'A' && nm2 <= 'E'):
   259  		return BulgariaNm
   260  	case nm1 == 'X' && (nm2 >= 'F' && nm2 <= 'K'):
   261  		return GreeceNm
   262  	case nm1 == 'X' && (nm2 >= 'L' && nm2 <= 'R'):
   263  		return NetherlandsNm
   264  	case nm1 == 'X' && (nm2 >= 'S' && nm2 <= 'W'):
   265  		return USSRNm
   266  	case nm1 == 'X' && ((nm2 >= 'X' && nm2 <= 'Z') || (nm2 == '1' || nm2 == '2')):
   267  		return LuxembourgNm
   268  	case nm1 == 'X' && ((nm2 >= '3' && nm2 <= '9') || (nm2 == '0')):
   269  		return RussiaNm
   270  	case nm1 == 'Y' && (nm2 >= 'A' && nm2 <= 'E'):
   271  		return BelgiumNm
   272  	case nm1 == 'Y' && (nm2 >= 'F' && nm2 <= 'K'):
   273  		return FinlandNm
   274  	case nm1 == 'Y' && (nm2 >= 'L' && nm2 <= 'R'):
   275  		return MaltaNm
   276  	case nm1 == 'Y' && (nm2 >= 'S' && nm2 <= 'W'):
   277  		return SwedenNm
   278  	case nm1 == 'Y' && ((nm2 >= 'X' && nm2 <= 'Z') || (nm2 == '1' || nm2 == '2')):
   279  		return NorwayNm
   280  	case nm1 == 'Y' && (nm2 >= '3' && nm2 <= '5'):
   281  		return BelarusNm
   282  	case nm1 == 'Y' && ((nm2 >= '6' && nm2 <= '9') || (nm2 == '0')):
   283  		return UkraineNm
   284  	case nm1 == 'Z' && (nm2 >= 'A' && nm2 <= 'R'):
   285  		return ItalyNm
   286  	case nm1 == 'Z' && ((nm2 >= 'X' && nm2 <= 'Z') || (nm2 == '1' || nm2 == '2')):
   287  		return SloveniaNm
   288  	case nm1 == 'Z' && (nm2 >= '3' && nm2 <= '5'):
   289  		return LithuaniaNm
   290  	default:
   291  		return EuropeStr
   292  	}
   293  }
   294  
   295  func GetNorthAmericaCountry(vin string) string {
   296  	nm1 := vin[0]
   297  	switch nm1 {
   298  	case '1', '4', '5':
   299  		return UnitedStatesNm
   300  	case '2':
   301  		return CanadaNm
   302  	case '3':
   303  		return MexicoNm
   304  	default:
   305  		return ""
   306  	}
   307  }
   308  
   309  func GetOceaniaCountry(vin string) string {
   310  	nm1 := vin[0]
   311  	nm2 := vin[1]
   312  	switch {
   313  	case nm1 == '6' && (nm2 >= 'A' && nm2 <= 'W'):
   314  		return AustriaNm
   315  	case nm1 == '7' && (nm2 >= 'A' && nm2 <= 'E'):
   316  		return NewZealandNm
   317  	default:
   318  		return OceaniaNm
   319  	}
   320  }
   321  
   322  func GetSouthAmericaCountry(vin string) string {
   323  	nm1 := vin[0]
   324  	nm2 := vin[1]
   325  	switch {
   326  	case nm1 == '8' && (nm2 >= 'A' && nm2 <= 'E'):
   327  		return ArgentinaNm
   328  	case nm1 == '8' && (nm2 >= 'F' && nm2 <= 'K'):
   329  		return ChileNm
   330  	case nm1 == '8' && (nm2 >= 'L' && nm2 <= 'R'):
   331  		return EcuadorNm
   332  	case nm1 == '8' && (nm2 >= 'S' && nm2 <= 'W'):
   333  		return PeruNm
   334  	case nm1 == '8' && ((nm2 >= 'X' && nm2 <= 'Z') || (nm2 == '1' || nm2 == '2')):
   335  		return VenezuelaNm
   336  	case nm1 == '9' && (nm2 >= 'A' && nm2 <= 'E'):
   337  		return BrazilNm
   338  	case nm1 == '9' && (nm2 >= 'F' && nm2 <= 'K'):
   339  		return ColombiaNm
   340  	case nm1 == '9' && (nm2 >= 'L' && nm2 <= 'R'):
   341  		return ParaguayNm
   342  	case nm1 == '9' && (nm2 >= 'S' && nm2 <= 'W'):
   343  		return UruguayNm
   344  	case nm1 == '9' && ((nm2 >= 'X' && nm2 <= 'Z') || (nm2 == '1' || nm2 == '2')):
   345  		return TrinidadTobagoNm
   346  	case nm1 == '9' && (nm2 >= '3' && nm2 <= '9'):
   347  		return BrazilNm
   348  	case nm1 == '9' && (nm2 == '0'):
   349  		return SANm
   350  	default:
   351  		return SouthAmericaNm
   352  	}
   353  }
   354  
   355  // 获取国属
   356  func GetVINCountry(vin string) string {
   357  	conti := GetVINContinent(vin)
   358  	switch conti {
   359  	case AfricaStr:
   360  		return GetAfricaCountry(vin)
   361  	case AsiaStr:
   362  		return GetAsiaCountry(vin)
   363  	case EuropeStr:
   364  		return GetEuropeCountry(vin)
   365  	case NorthAmericaStr:
   366  		return GetNorthAmericaCountry(vin)
   367  	case OceaniaStr:
   368  		return GetOceaniaCountry(vin)
   369  	case SouthAmericaStr:
   370  		return GetSouthAmericaCountry(vin)
   371  	default:
   372  		return ""
   373  	}
   374  }