RFC 23667

iisis edited this page Mar 25, 2018 · 7 revisions

RFC 23667

Данная спецификация описывает основные понятия в разработке приложений отраслевого рынка автозапчастей.

Стандартизированный артикул(номер) (numberStandart, shortArticle)

Производитель автозапчастей предлагает свою нумерацию деталей. В номерах часто можно встретить спец. символы(-,. и т.д.). Для оптимизации работы с деталями в базах данных спецсимволы убирают. Большинство продавцов поднимают номер в верхний или опускают в нижний регистр.

Храненить артикулы в БД необходимо только после стандартизации номера.

Реализации метода на разных языках: Данный метод является сильно нагруженным и крайне не рекомендуется использовать регулярные выражения.

Методы можно использовать для стандартизации брендов производителей.

  • PHP

       function clearString($string){
           return str_replace(['!','#', '$', '%', '&', "'", '*', '+', '-', '=', '?', '^','_','`', '{', '|', '}', '~', '@', '.', '[', ']'], '', filter_var($string, FILTER_SANITIZE_EMAIL));
      }
      
    
    
  • JAVA

    В примере реализована замена латинских символов, которые присутствуют в немецком алфавите: DE "ä" -> a, DE "ö" -> o, DE "ü" -> u и RU "ё" -> RU е

      public static String getNumberStandart(String a) {
    
          if (a == null) return "";
    
          char[] charList = a.toCharArray();
          StringBuilder sb = new StringBuilder();
          char charItem;
          for (int i = 0; i < charList.length; i++) {
              charItem = charList[i];
    
              if (charItem >= '\u0030' && charItem <= '\u0039') { //numbers
                  sb.append(charItem);
              }else if (charItem >= '\u0061' && charItem <= '\u007A'){ //abc lower
                  sb.append(charItem);
              }else if (charItem >= '\u0041' && charItem <= '\u005A'){ //ABC upper
                  sb.append(Character.toLowerCase(charItem));
              }else if (charItem >= '\u0430' && charItem <= '\u044F'){//rus lower ()
                  sb.append(charItem);
              }else if (charItem >= '\u0410' && charItem <= '\u042F') { //rus upper ()
                  sb.append(Character.toLowerCase(charItem));
              }else{
                  switch (charItem){
                      case '\u00C4': //DE  -> EN a
                          sb.append('\u0061');
                          break;
                      case '\u00E4': //DE  -> EN a
                          sb.append('\u0061');
                          break;
                      case '\u00D6': //DE  -> EN o
                          sb.append('\u006F');
                          break;
                      case '\u00F6': //DE  -> EN o
                          sb.append('\u006F');
                          break;
                      case '\u00DC': //DE  -> EN u
                          sb.append('\u0075');
                          break;
                      case '\u00FC': //DE  -> EN u
                          sb.append('\u0075');
                          break;
                      case '\u0451': //RU  -> RU e
                          sb.append('\u0435');
                          break;
                      case '\u0401': //RU  -> RU e
                          sb.append('\u0435');
                          break;
                  }
    
              }
          }
          return sb.toString();
      }
      
       
    
  • Go

    В примере реализована замена латинских символов, которые присутствуют в немецком алфавите: DE "ä" -> a, DE "ö" -> o, DE "ü" -> u и RU "ё" -> RU е

     func GetProductNs(n string) string {
     
         var buffer bytes.Buffer
     
         for _, charCode := range strings.ToLower(n) {
     
             if charCode >= 48 && charCode <= 57 {           //цифры с 48 по 57
                 buffer.WriteString(string(charCode))
             }else if charCode >= 97 && charCode <= 122   { //английские с 97 по 122
                 buffer.WriteString(string(charCode))
             }else if charCode >= 1072 && charCode <= 1103 { //русские с 1072 по 1103
                 buffer.WriteString(string(charCode))
             }else {
                 switch charCode {
                 case 228: //DE "ä" -> EN a
                     buffer.WriteString(string(97))
                     break
                 case 246: //DE "ö" -> EN o
                     buffer.WriteString(string(111))
                     break
                 case 252: //DE "ü" -> EN u
                     buffer.WriteString(string(117))
                     break
                 case 1105: //RU "ё" -> RU е
                     buffer.WriteString(string(1077))
                     break
                 }
             }
         }
     
         return buffer.String();
     }
        
    
  • 1C

    В примере реализована замена латинских символов, которые присутствуют в немецком алфавите: DE "ä" -> a, DE "ö" -> o, DE "ü" -> u и RU "ё" -> RU е

     Function NumberStandartGet(Number) 
      	СurrentNumber = Lower(Number);
      	
      	StrLen = StrLen(СurrentNumber);
      	
      	ns = "";
      	
      	For Stat = 1 To StrLen Do
      		Symbol  = Mid(СurrentNumber, Stat, 1);	
      		CharCode = CharCode(Symbol);
      		
      		If CharCode >= 48 And CharCode <= 57 Then           //цифры с 48 по 57
      			ns = ns + Symbol;
      		ElsIf CharCode >= 97 And CharCode <= 122 Then //английские с 97 по 122
      			ns = ns + Symbol;
      		ElsIf CharCode >= 1072 And CharCode <= 1103 Then //русские с 1072 по 1103	
      			ns = ns + Symbol;
      		Else   
      			If CharCode = 228 Then  //DE "ä" -> EN a
      				ns = ns + "a";
      			ElsIf CharCode = 246 Then  //DE "ö" -> EN o
      				ns = ns + "o";
      			ElsIf CharCode = 252 Then  //DE "ü" -> EN u
      				ns = ns + "u";
      			ElsIf CharCode = 1105 Then  //RU "ё" -> RU е 
      				ns = ns + "е";	
      			EndIf;
      		EndIf;
      	EndDo;
      	
      	Return ns;
    
     EndFunction
          
    
    

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.