Skip to content

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

      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

     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

     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