vehicle.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // Copyright 2019 github.com. All rights reserved.
  2. // Use of this source code is governed by github.com.
  3. package util
  4. import (
  5. "regexp"
  6. "unicode"
  7. "unicode/utf8"
  8. )
  9. // SplitPlateNo 分割汽车车牌
  10. func SplitPlateNo(s string) (string, string) {
  11. idx := 0
  12. for i, r := range s {
  13. if !unicode.Is(unicode.Scripts["Han"], r) {
  14. idx = i
  15. break
  16. }
  17. }
  18. return s[0:idx], s[idx:]
  19. }
  20. // IsPlateNo 是否为车牌号
  21. func IsPlateNo(s string) bool {
  22. switch utf8.RuneCountInString(s) {
  23. case 7:
  24. return is6lateNo(s)
  25. case 8:
  26. return is7PlateNo(s)
  27. }
  28. return false
  29. }
  30. // 验证6位车牌号, 即:燃油汽车
  31. func is6lateNo(s string) bool {
  32. reg := "^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使]{1}[A-Z]{1}[0-9A-Z]{5}$"
  33. matched, err := regexp.MatchString(reg, s)
  34. if err != nil {
  35. return false
  36. }
  37. if matched {
  38. bytes := []byte(s)
  39. count := 0
  40. for _, c := range bytes {
  41. if c >= 65 && c <= 90 {
  42. count++
  43. }
  44. }
  45. if count > 3 {
  46. return false
  47. }
  48. return true
  49. }
  50. return false
  51. }
  52. // 验证7位车牌号,即:新能源汽车
  53. func is7PlateNo(s string) bool {
  54. reg := `^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使]{1}[a-zA-Z][dfDF][0-9a-zA-Z]\d{4}$|^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使][a-zA-Z]\d{5}[dfDF]$`
  55. matched, err := regexp.MatchString(reg, s)
  56. if err != nil {
  57. return false
  58. }
  59. return matched
  60. }
  61. // 车身颜色
  62. var vehicleColor = map[string]string{
  63. "A": "白",
  64. "B": "灰",
  65. "C": "黄",
  66. "D": "粉",
  67. "E": "红",
  68. "F": "紫",
  69. "G": "绿",
  70. "H": "蓝",
  71. "I": "棕",
  72. "J": "黑",
  73. }
  74. // 车辆类型
  75. var vehicleType = map[string]string{
  76. "01": "大型汽车",
  77. "02": "小型汽车",
  78. "03": "使馆汽车",
  79. "04": "领馆汽车",
  80. "05": "境外汽车",
  81. "06": "外籍汽车",
  82. "07": "普通摩托车",
  83. "08": "轻便摩托车",
  84. "09": "使馆摩托车",
  85. "10": "领馆摩托车",
  86. "11": "境外摩托车",
  87. "12": "外籍摩托车",
  88. "13": "低速车",
  89. "14": "拖拉机",
  90. "15": "挂车",
  91. "16": "教练汽车",
  92. "17": "教练摩托车",
  93. "20": "临时入境汽车",
  94. "21": "临时入境摩托车",
  95. "22": "临时行驶车",
  96. "23": "警用汽车",
  97. "24": "警用摩托",
  98. "51": "大型新能源汽车",
  99. "52": "小型新能源汽车",
  100. }
  101. // 车辆燃油种类
  102. var vehicleFuel = map[string]string{
  103. "A": "汽油",
  104. "B": "柴油",
  105. "C": "电",
  106. "D": "混合油",
  107. "E": "天然气",
  108. "F": "液化石油气",
  109. "L": "甲醇",
  110. "M": "乙醇",
  111. "N": "太阳能",
  112. "O": "混合动力",
  113. "P": "氢",
  114. "Q": "生物燃料",
  115. }
  116. // 使用性质
  117. var vehicleProperty = map[string]string{
  118. "A": "非营运",
  119. "B": "公路客运",
  120. "C": "公交客运",
  121. "D": "出租客运",
  122. "E": "旅游客运",
  123. "F": "货运",
  124. "G": "租赁",
  125. "H": "警用",
  126. "I": "消防",
  127. "J": "救护",
  128. "K": "工程救险",
  129. "L": "营转非",
  130. "M": "出租转非",
  131. "N": "教练",
  132. "O": "幼儿校车",
  133. "P": "小学生校车",
  134. "Q": "初中生校车",
  135. "R": "危化品运输",
  136. "S": "中小学生校车",
  137. }
  138. // VehicleColor 映射车辆车身颜色
  139. // code 颜色编号 A => 白色
  140. func VehicleColor(code string) string {
  141. if v, ok := vehicleColor[code]; ok {
  142. return v
  143. }
  144. return ""
  145. }
  146. // VehicleType 映射车辆类型
  147. // code 类型编号 02 = 小型车
  148. func VehicleType(code string) string {
  149. if v, ok := vehicleType[code]; ok {
  150. return v
  151. }
  152. return ""
  153. }
  154. // VehicleType 映射车辆燃油种类
  155. // code 类型编号 A => 汽油
  156. func VehicleFuel(code string) string {
  157. if v, ok := vehicleFuel[code]; ok {
  158. return v
  159. }
  160. return ""
  161. }
  162. // VehicleType 映射车辆使用性质
  163. // code 类型编号 A => 非营运
  164. func VehicleProperty(code string) string {
  165. if v, ok := vehicleProperty[code]; ok {
  166. return v
  167. }
  168. return ""
  169. }