2014-12-19 2 views
2

Что касается штрих-кодов, UPC-E и EAN-8 имеют такое же количество цифр. (8)Разница между UPC-E и EAN-8 в Swift

При сканировании штрих-кода я должен удалить контрольную цифру. Я должен удалить его в соответствии со штрих-кодом в базе данных.

Как я могу провести различие между этими двумя? С моими штрихкодами, разграничить на основе длиной цифр и удалить последнюю цифру, но за эти два я не могу, потому что они оба из 8 цифр и только один должны иметь контрольные цифры удалены

  • Контрольная цифра EAN-8 не требуется снимать

  • Необходимо отметить, что контрольная цифра UPC-E является символьным индексом 7 (последняя цифра), а также номером системного символа с индексом 0 (первая цифра).

Есть ли способ, что я могу дифференцировать на основе алгоритма проверки цифр, или ...

+0

Какую библиотеку/API вы используете для чтения штрих-кодов? –

ответ

1

Я не думаю, что этот вопрос связан с Swift на всех. Я предполагаю, что сканер штрих-кода подключен через USB-порт. Сканер, вероятно, маскируется как клавиатура и «набирает» декодированные данные. Вам нужно будет обратиться к документации сканера, чтобы выяснить, как перенастроить сканер для предоставления диагностических данных в дополнение к декодированным данным. Диагностика будет включать тип штрих-кода.

В качестве обходного пути вы можете удалить последнюю цифру, попробуйте найти базу данных, если это не удалит первую цифру и повторите поиск.

+0

Сканер штрих-кода реализован в Swift для iPhone. – Machina

+0

@Machina Это точно, но вопрос не зависит от выбора языка программирования. Подождите, у вас есть исходный код для этого сканера штрих-кода? –

1

Закончено выполнение рабочего процесса. Если он не подключен, удалите и повторите попытку. Спасибо Kuba

if (barcodeLength == 13) { 

     // EAN-13 \\ 

     // ********** Database Function ********** Database Function ********** \\ 


     // 1 
     let urlString: String = "http://\(hostString):\(portString)/barcode.php?&password=\(passString)&db=\(dbString)&barNum=\(self.scannedBarcode)" 
     let url: NSURL? = NSURL(string: urlString)! 
     let urlSession = NSURLSession.sharedSession() 


     //2 
     let jsonQuery = urlSession.dataTaskWithURL(url!, completionHandler: { data, response, error -> Void in 
      if (error != nil) { 
       println("\(error.localizedDescription)") 
      } 
      var err: NSError? 

      var jsonResult: Array? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSArray? 



      if (err != nil) { 


       println("Can't connect using credentials") 
       println("JSON Error \(err!.localizedDescription)") 



      } 

      if jsonResult?.count == 0 { 

       println("Check digit removed from EAN-13") 

       self.scannedBarcode.removeAtIndex(self.scannedBarcode.endIndex.predecessor()) 

       println(self.scannedBarcode) 


       self.jsonComp() 

       return 

      } 

      println("Well, this is 13 digit EAN-13") 

      // 4 

      let itemID: String! = jsonResult![0]["ITEM_ID"] as NSString 
      let itemName: String! = jsonResult![0]["ITEM_Kitchen_Name"] as NSString 
      let itemPrice: String! = jsonResult![0]["ITEM_Sale_Price"] as NSString 


      println(itemID, itemName, itemPrice) 

      self.selectedID = itemID 
      self.selectedName = itemName 
      self.selectedPrice = itemPrice 


      dispatch_async(dispatch_get_main_queue(), { 


       self.performSegueWithIdentifier("editPrice", sender: AnyObject?()) 

       // 
      }) 
     }) 

     // 5 
     jsonQuery.resume() 


    } 

    else if (barcodeLength == 12) { 

     // UPC-A \\ 

     // ********** Database Function ********** Database Function ********** \\ 


     // 1 
     let urlString: String = "http://\(hostString):\(portString)/barcode.php?&password=\(passString)&db=\(dbString)&barNum=\(self.scannedBarcode)" 
     let url: NSURL? = NSURL(string: urlString)! 
     let urlSession = NSURLSession.sharedSession() 


     //2 
     let jsonQuery = urlSession.dataTaskWithURL(url!, completionHandler: { data, response, error -> Void in 
      if (error != nil) { 
       println("\(error.localizedDescription)") 
      } 
      var err: NSError? 

      var jsonResult: Array? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSArray? 



      if (err != nil) { 


       println("Can't connect using credentials") 
       println("JSON Error \(err!.localizedDescription)") 



      } 

      if jsonResult?.count == 0 { 

       println("Check digit removed from UPC-A") 

       self.scannedBarcode.removeAtIndex(self.scannedBarcode.endIndex.predecessor()) 

       println(self.scannedBarcode) 


       self.jsonComp() 

       return 

      } 

      println("Well, this is 12 digit UPC-A") 

      // 4 

      let itemID: String! = jsonResult![0]["ITEM_ID"] as NSString 
      let itemName: String! = jsonResult![0]["ITEM_Kitchen_Name"] as NSString 
      let itemPrice: String! = jsonResult![0]["ITEM_Sale_Price"] as NSString 


      println(itemID, itemName, itemPrice) 

      self.selectedID = itemID 
      self.selectedName = itemName 
      self.selectedPrice = itemPrice 


      dispatch_async(dispatch_get_main_queue(), { 


       self.performSegueWithIdentifier("editPrice", sender: AnyObject?()) 

       // 
      }) 
     }) 

     // 5 
     jsonQuery.resume() 



    } 

    else if (barcodeLength == 8) { 



     // ********** Database Function ********** Database Function ********** \\ 


     // 1 
     let urlString: String = "http://\(hostString):\(portString)/barcode.php?&password=\(passString)&db=\(dbString)&barNum=\(self.scannedBarcode)" 
     let url: NSURL? = NSURL(string: urlString)! 
     let urlSession = NSURLSession.sharedSession() 


     //2 
     let jsonQuery = urlSession.dataTaskWithURL(url!, completionHandler: { data, response, error -> Void in 
      if (error != nil) { 
       println("\(error.localizedDescription)") 
      } 
      var err: NSError? 

      var jsonResult: Array? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSArray? 



      if (err != nil) { 


       println("Can't connect using credentials") 
       println("JSON Error \(err!.localizedDescription)") 



      } 

      if jsonResult?.count == 0 { 

       println("Well, this is UPC-E") 

       self.scannedBarcode.removeAtIndex(self.scannedBarcode.startIndex) 
       self.scannedBarcode.removeAtIndex(self.scannedBarcode.endIndex.predecessor()) 


       println(self.scannedBarcode) 


       self.jsonComp() 

       return 

      } 

      println("Well, this is EAN-8") 

      // 4 

      let itemID: String! = jsonResult![0]["ITEM_ID"] as NSString 
      let itemName: String! = jsonResult![0]["ITEM_Kitchen_Name"] as NSString 

      if jsonResult![0]["ITEM_Sale_Price"] == nil { 

       println("No Sale Price") 

       dispatch_async(dispatch_get_main_queue(), { 

        HUDController.sharedController.hide(afterDelay: 0.1) 

       }) 

       var refreshAlert = UIAlertController(title: "Camaleon Reports", message: "Barcode does not have a price set", preferredStyle: UIAlertControllerStyle.Alert) 
       refreshAlert.addAction(UIAlertAction(title: "Retry", style: .Default, handler: { (action: UIAlertAction!) in 
        println("Yes Logic") 

       })) 


       self.presentViewController(refreshAlert, animated: true, completion: nil) 

       return 

      } 

      let itemPrice: String! = jsonResult![0]["ITEM_Sale_Price"] as NSString 


      println(itemID, itemName, itemPrice) 

      self.selectedID = itemID 
      self.selectedName = itemName 
      self.selectedPrice = itemPrice 


      dispatch_async(dispatch_get_main_queue(), { 


       self.performSegueWithIdentifier("editPrice", sender: AnyObject?()) 

       // 
      }) 
     }) 

     // 5 
     jsonQuery.resume() 

    } else { 


     dispatch_async(dispatch_get_main_queue(), { 

      HUDController.sharedController.hide(afterDelay: 0.1) 

     }) 

     var refreshAlert = UIAlertController(title: "Camaleon Reports", message: "Barcode does not exist", preferredStyle: UIAlertControllerStyle.Alert) 
     refreshAlert.addAction(UIAlertAction(title: "Retry", style: .Default, handler: { (action: UIAlertAction!) in 
      println("Yes Logic") 

     })) 


     self.presentViewController(refreshAlert, animated: true, completion: nil) 

     return 


    } 

} 
1

Я не думаю, что вы всегда можете. EAN-8 и UPC-E имеют разные механизмы контрольной суммы. Для UPC-E вы сначала расширяетесь до UPC-A, затем вычисляете контрольную сумму. Fo EAN-8, вы просто используете первые 7 цифр. Если контрольная цифра действительна только для EAN-8 или UPC-E, вы получите ответ. Но если оба матча (я считаю, что это может произойти), то вы не можете определить, будет ли это EAN8 или UPCE на основе цифр.

Смежные вопросы