Example #1
0
        public void SetInfo(QRInfo info, bool online)
        {
            if (online)
            {
                offline.Visibility = ViewStates.Gone;
            }
            else
            {
                offline.Visibility = ViewStates.Visible;
            }
            switch (info.PasaporteColor)
            {
            case "Verde":
                label1.Text = GetString(Resource.String.title_pasar);
                label2.Text = GetString(Resource.String.subtitle_pasar);
                image.SetImageResource(Resource.Drawable.ok);
                root.SetBackgroundResource(Resource.Color.colorStateGreen);
                break;

            case "Rojo":
                label1.Text = GetString(Resource.String.title_nopasar);
                label2.Text = GetString(Resource.String.subtitle_nopasar);
                image.SetImageResource(Resource.Drawable.block);
                root.SetBackgroundResource(Resource.Color.colorStateRed);
                break;

            case "Gris":
                label1.Text = GetString(Resource.String.title_nopasar);
                label2.Text = GetString(Resource.String.subtitle_caducado);
                image.SetImageResource(Resource.Drawable.block);
                root.SetBackgroundResource(Resource.Color.colorStateCaducado);
                break;
            }
        }
        public async void SetSacnnerResult(string text)
        {
            ConfigureLanguage();
            if (text != null)
            {
                try
                {
                    //var info = JsonConvert.DeserializeObject<QRInfo>(text);
                    var encripted = EncryptUtils.Desencriptar(text);
                    var values    = encripted.Split(';');
                    var info      = new QRInfo()
                    {
                        IdEmpleado     = Convert.ToInt32(values[0]),
                        PasaporteColor = values[1],
                    };
                    long date = Convert.ToInt64(values[2]);
                    if (date >= 0)
                    {
                        info.FechaExpiracion = new DateTime(date);
                    }
                    Locator.Current.GetService <AppSession>().QRInfo = info;
                    navigator.GoResult();
                }catch (Exception e)
                {
                    await Task.Delay(500);

                    View.ShowDialog("qr_no_valid", "msg_ok", null);
                }
            }
        }
Example #3
0
 private void QRCodeTrackingService_QRCodeFound(object sender, QRInfo codeReceived)
 {
     if (lastSeenCode?.Data != codeReceived.Data)
     {
         displayText.text = $"code observed: {codeReceived.Data}";
         if (confirmSound.clip != null)
         {
             confirmSound.Play();
         }
     }
     lastSeenCode = codeReceived;
 }
Example #4
0
 private void Update()
 {
     if (lastSeenCode == null)
     {
         return;
     }
     if (Math.Abs(
             (lastSeenCode.LastDetectedTime.UtcDateTime - DateTimeOffset.UtcNow).TotalMilliseconds) >
         qrObservationTimeOut)
     {
         lastSeenCode     = null;
         displayText.text = string.Empty;
     }
 }
Example #5
0
        public string CreateQRString(QRInfo qrData)
        {
            var EMVCo               = "000201";
            var applicationID       = "0016A000000677010112";
            var BillerID            = $"{qrData.TaxID}{qrData.Suffix}";
            var defaultBiller       = "00000000000001";
            var billPaymentBillerID = !String.IsNullOrEmpty(BillerID) ? $"01{fieldIsNull(BillerID)}" : $"01{fieldIsNull(defaultBiller)}";
            var reference1          = $"02{fieldIsNull(qrData.Ref1)}";
            var reference2          = $"03{fieldIsNull(qrData.Ref2)}";
            var transactionAmount   = "";

            if (!String.IsNullOrEmpty(qrData.Amount))
            {
                var amount = String.Format("{0:0.00}", Convert.ToDouble(qrData.Amount));
                transactionAmount = $"54{len(amount)}{amount}";
            }
            else
            {
                transactionAmount = "";
            }
            var transactionCurrency = !String.IsNullOrEmpty(qrData.Currency) ? $"5303{qrData.Currency}" : $"5303764";
            var countryCode         = !String.IsNullOrEmpty(qrData.CountryCode) ? $"5802{(qrData.CountryCode).ToUpper()}" : "5802TH";
            var merchantName        = !String.IsNullOrEmpty(qrData.MerchantName) ? $"59{fieldIsNull(qrData.MerchantName)}" : "";
            var terminalNumber      = !String.IsNullOrEmpty(qrData.TerminalNo) ? $"62{fieldIsNull(qrData.TerminalNo)}" : "";
            var qrUse           = qrData.PointOfInherite == "No" ? "010212" : "010211";
            var billPayment     = $"{applicationID}{billPaymentBillerID}{reference1}{reference2}";
            var billPaymentInfo = $"30{fieldIsNull(billPayment)}";
            var qrcode          = new StringBuilder();

            qrcode.Append(EMVCo)
            .Append(qrUse)
            .Append(billPaymentInfo)
            .Append(transactionCurrency)
            .Append(transactionAmount)
            .Append(countryCode)
            .Append(merchantName)
            .Append(terminalNumber)
            .Append("6304");
            var payload = qrcode.ToString().Select(x => Convert.ToByte(x)).ToArray();
            var crc     = new CRC16().ComputeCheckSum(payload);
            var crc16   = crc.ToString("X").PadLeft(4, '0');

            qrcode.Append(crc16);
            return(qrcode.ToString());
        }
Example #6
0
        public async Task YesClicked()
        {
            var info = new QRInfo()
            {
                IdEmpleado     = user.IdEmpleado,
                PasaporteColor = "Rojo",
                Manual         = true
            };

            Locator.Current.GetService <AppSession>().QRInfo = info;
            View.ShowLoading();
            var response = await generateManualUseCase.Execute(user.IdEmpleado, false);

            View.HideLoading();
            if (response.ErrorCode > 0)
            {
                View.ShowDialog(response.Message, "msg_ok", null);
            }
            else
            {
                navigator.GoResult();
            }
        }
Example #7
0
        public List <QRInfo> CusQrInfo(int CustId)
        {
            List <Routes> HubList       = new Routes().RouteList();
            List <QRInfo> CusQrInfoTemp = new List <QRInfo>();
            List <Orders> CustOrderList = Orders.List.FindAll(x => x.CID == CustId);

            for (int i = 0; i < CustOrderList.Count; i++)
            {
                QRInfo TempObj = new QRInfo();
                TempObj.CustID  = CustOrderList[i].CID;
                TempObj.OrderID = CustOrderList[i].OID;
                var tifinno = Regex.Split(CustOrderList[i].TifinIds, ",").Where(x => x != string.Empty).ToArray();
                TempObj.TifinCodes = string.Join(",", tifinno);
                TempObj.OrderType  = CustOrderList[i].Type;
                TempObj.HubName    = "";
                Routes ObjHub = HubList.Find(x => x.HubID == CustOrderList[i].HubId);
                if (ObjHub != null)
                {
                    TempObj.HubName = ObjHub.HubName + "( " + ObjHub.MobileNo.ToString() + " )";
                }
                CusQrInfoTemp.Add(TempObj);
            }
            return(CusQrInfoTemp);
        }
Example #8
0
        private void generate_Btn_Click(object sender, EventArgs e)
        {
            var encodeModel = new QRInfo
            {
                TaxID           = txtTaxID.Text,
                Suffix          = txtSuffix.Text,
                Ref1            = txtRef1.Text,
                Ref2            = txtRef2.Text,
                Amount          = txtAmount.Text,
                Currency        = txtCurrency.Text,
                CountryCode     = txtCountryCode.Text,
                MerchantName    = txtMerchantName.Text,
                TerminalNo      = txtTerminalNumber.Text,
                PointOfInherite = cbUsese.Text
            };

            var    encode   = new QRService();
            string qrString = encode.CreateQRString(encodeModel);

            ID.Text = qrString;
            var imageQR = PromptPayQR.PromptPayQR.QRCodeImage(qrString);

            QRBox.Image = imageQR;
        }
Example #9
0
        unsafe static void Main(string[] args)
        {
            int version  = 5;
            int cellSize = 6;

            byte[] data1    = Encoding.UTF8.GetBytes("BAKA");
            var    N        = QRInfo.GetN(version);
            var    maxError = QRInfo.GetMaxErrorAllowBytes(version, ECCLevel.L);
            var    template = new Bitmap(@"Z:\2.png");
            var    pixels   = QRCodeMagician.GetImagePixel(version, template, cellSize, cellSize / 3);
            var    qr       = QRCodeMagician.ImageArt(DataMode.Alphanumeric, version, ECCLevel.L, MaskVersion.Version100, data1, pixels, 4);
            var    bitmap   = new Bitmap((N + 2) * cellSize, (N + 2) * cellSize);
            // var bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);
            var fixedBlackBrush = Brushes.Black;
            var fixedWhiteBrush = Brushes.White;
            var blackBrush      = Brushes.Black;
            var whiteBrush      = Brushes.White;
            var halftone        = cellSize / 3;

            using (var g = Graphics.FromImage(bitmap)) {
                g.Clear(Color.White);
                g.DrawImage(new Bitmap(@"Z:\1.png"), new Rectangle(cellSize, cellSize, N * cellSize, N * cellSize));
                for (int x = 0; x < N; x++)
                {
                    for (int y = 0; y < N; y++)
                    {
                        var drawX = x + 1;
                        var drawY = y + 1;

                        if (qr[x, y].Type == QRValueType.TimingPatterns)
                        {
                            continue;
                        }


                        //if (qr[x, y].Type == QRValueType.Fixed || qr[x, y].Type == QRValueType.TimingPatterns || qr[x, y].Type == QRValueType.Format || qr[x, y].Type == QRValueType.Version) {
                        if (qr[x, y].Type == QRValueType.Fixed || qr[x, y].Type == QRValueType.TimingPatterns)
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(fixedBlackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                            else
                            {
                                // g.FillRectangle(fixedWhiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                            //if (qr[x, y].Value) {
                            //	g.FillRectangle(blackBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            //} else {
                            //	g.FillRectangle(whiteBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            //}
                        }
                        else if (!pixels[x, y].HasFlag(ImagePixel.Stable) || qr[x, y].Value != pixels[x, y].HasFlag(ImagePixel.Black))
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(blackBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            }
                            else
                            {
                                g.FillRectangle(whiteBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            }
                            //if (qr[x, y].Value) {
                            //	g.FillRectangle(fixedBlackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            //} else {
                            //	g.FillRectangle(fixedWhiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            //}
                        }
                    }
                }
            }
            bitmap.Save(@"Z:\out.png");
        }
        /// <summary>
        /// Returns a string with extended barcode info.
        /// </summary>
        /// <param name="barcodeInfo">A barcode info.</param>
        /// <param name="textEncodingName">A text encoding name.</param>
        /// <returns>
        /// A string with extended barcode info.
        /// </returns>
        internal string GetExtendedBarcodeInfoString(IBarcodeInfo barcodeInfo, string textEncodingName)
        {
            // if barcode info is empty
            if (barcodeInfo == null)
            {
                return(string.Empty);
            }

            IBarcodeInfo info;

            if (barcodeInfo is BarcodeSubsetInfo)
            {
                info = ((BarcodeSubsetInfo)barcodeInfo).BaseBarcodeInfo;
            }
            else
            {
                info = barcodeInfo;
            }

            StringBuilder extendedInfo = new StringBuilder();

            // append barcode value
            try
            {
                extendedInfo.AppendLine(Utils.GetEncodedBarcodeValue(barcodeInfo, textEncodingName));
            }
            catch (NotSupportedException)
            {
                extendedInfo.AppendLine(Utils.GetEncodedBarcodeValue(barcodeInfo, "-1"));
            }
            extendedInfo.AppendLine();
            extendedInfo.AppendLine(Resources.GetString(Resource.String.metadata_message));
            extendedInfo.AppendLine();

            // if barcode is 2D barcode
            if (info is BarcodeInfo2D)
            {
                // get 2D barcode info
                BarcodeInfo2D info2D = (BarcodeInfo2D)info;
                // get matrix size
                extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.matrix_size_message), info2D.MatrixWidth, info2D.MatrixHeight));
                // get cell size
                extendedInfo.AppendLine(string.Format(CultureInfo.InvariantCulture, Resources.GetString(Resource.String.cell_size_message),
                                                      info2D.CellWidth, info2D.CellHeight));
                if (info2D.IsMirrored)
                {
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.mirrored_message), info2D.IsMirrored));
                }
            }
            // if barcode is 1D barcode
            if (info is BarcodeInfo1D)
            {
                // get 1D barcode info
                BarcodeInfo1D info1D = (BarcodeInfo1D)info;
                // get narrow bar count
                extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.narrow_bar_count_message), info1D.NarrowBarCount));
                // get narrow bar size
                extendedInfo.AppendLine(string.Format(CultureInfo.InvariantCulture, Resources.GetString(Resource.String.narrow_bar_size_message), info1D.NarrowBarSize));
            }

            if (info.SymbolComponents != null)
            {
                extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.symbol_component_count_message), info.SymbolComponents.Length));
            }

            if (info is StructuredAppendBarcodeInfo)
            {
                extendedInfo.AppendLine(Resources.GetString(Resource.String.reconstructed_message));
            }
            else
            {
                switch (info.BarcodeType)
                {
                // if barcode is PDF417
                case BarcodeType.PDF417:
                case BarcodeType.PDF417Compact:
                    // get PDF417 barcode info
                    PDF417Info pdf417Info = (PDF417Info)info;
                    // get rows count
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.rows_count_message), pdf417Info.RowsCount));
                    // get error correction level
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.error_correction_level_message),
                                                          Utils.PDF417ErrorCorrectionLevelToString(pdf417Info.ErrorCorrectionLevel)));
                    break;

                // if barcode is MicroPDF417
                case BarcodeType.MicroPDF417:
                    // get MicroPDF417 barcode info
                    MicroPDF417Info microPdf417Info = (MicroPDF417Info)info;
                    // get symbol type
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.symbol_type_message),
                                                          Utils.MicroPDF417SymbolTypeToString(microPdf417Info.SymbolType)));
                    break;

                // if barcode if DataMatrix
                case BarcodeType.DataMatrix:
                    // get DataMatrix barcode info
                    DataMatrixInfo dataMatrixInfo = (DataMatrixInfo)info;
                    // get symbol type
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.symbol_type_message),
                                                          Utils.DataMatrixSymbolTypeToString(dataMatrixInfo.Symbol.SymbolType)));
                    break;

                // if barcode is QR
                case BarcodeType.MicroQR:
                case BarcodeType.QR:
                    // get QR barcode info
                    QRInfo qrInfo = (QRInfo)info;
                    // get symbol version
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.symbol_version_message),
                                                          Utils.QRSymbolVersionToString(qrInfo.Symbol.Version)));
                    // get error correction level
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.error_correction_level_message),
                                                          Utils.QRErrorCorrectionLevelToString(qrInfo.ErrorCorrectionLevel)));
                    break;

                // if barcode is Aztec
                case BarcodeType.Aztec:
                    // get Aztec barcode info
                    AztecInfo aztecInfo = (AztecInfo)info;
                    // get symbol type
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.symbol_type_message),
                                                          Utils.AztecSymbolTypeToString(aztecInfo.Symbol.SymbolType)));
                    // get data layers
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.data_layers_message), aztecInfo.Symbol.DataLayers));
                    // get error correction data
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.error_correction_data_message),
                                                          aztecInfo.Symbol.ErrorCorrectionData.ToString("F3")));
                    break;

                // if barcode is HanXin
                case BarcodeType.HanXinCode:
                    // get HanXin barcode info
                    HanXinCodeInfo hanXinInfo = (HanXinCodeInfo)info;
                    // get symbol version
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.symbol_version_message),
                                                          Utils.HanXinCodeSymbolVersionToString(hanXinInfo.Symbol.Version)));
                    // get error correction level
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.error_correction_level_message),
                                                          Utils.HanXinCodeErrorCorrectionLevelToString(hanXinInfo.Symbol.ErrorCorrectionLevel)));
                    break;

                // if barcode is MaxiCode
                case BarcodeType.MaxiCode:
                    // get MaxiCode barcode info
                    MaxiCodeInfo maxiCodeInfo = (MaxiCodeInfo)info;
                    // get encoding mode
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.encoding_mode_message),
                                                          Utils.MaxiCodeEncodingModeToString(maxiCodeInfo.EncodingMode)));
                    break;

                // if barcode is RSS14
                case BarcodeType.RSS14:
                case BarcodeType.RSS14Stacked:
                case BarcodeType.RSSExpanded:
                case BarcodeType.RSSExpandedStacked:
                case BarcodeType.RSSLimited:
                    // get RSS barcode info
                    RSSInfo rssInfo = (RSSInfo)info;
                    // get segments count
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.segments_count_message), rssInfo.SegmentsCount));
                    // get rows count
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.rows_count_message), rssInfo.RowsCount));
                    // get segments in row
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.segments_in_row_message), rssInfo.SegmentsInRow));
                    // get linkage flag
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.linkage_flag_message), rssInfo.LinkageFlag));
                    break;

                // if barcode is UPCE
                case BarcodeType.UPCE:
                    // get UPCE barcode info
                    UPCEANInfo upcEANInfo = (UPCEANInfo)info;
                    // get UPCE value
                    extendedInfo.AppendLine(string.Format(Resources.GetString(Resource.String.upce_value_message), upcEANInfo.UPCEValue));
                    break;
                }
            }

            extendedInfo.AppendLine(string.Format(CultureInfo.InvariantCulture, Resources.GetString(Resource.String.recognition_quality_message), info.ReadingQuality));

            return(extendedInfo.ToString());
        }
Example #11
0
        private async Task GetData()
        {
            info   = Locator.Current.GetService <AppSession>().QRInfo;
            online = true;
            View.ShowLoading();
            var response = await getSecurityPassportUseCase.Execute(info.IdEmpleado);

            View.HideLoading();
            dict           = new Dictionary <string, string>();
            dict["manual"] = info.Manual.ToString();
            if (response.ErrorCode > 0)
            {
                online = false;
                if (info.Manual)
                {
                    View.ShowDialog(response.Message, "msg_ok", () => navigator.GoBack());
                    return;
                }
                dict["online"] = "false";
            }
            else
            {
                info = new QRInfo()
                {
                    IdEmpleado      = response.Data.IdEmpleado,
                    FechaExpiracion = response.Data.FechaExpiracion,
                    PasaporteColor  = response.Data.ColorPasaporte
                };
                dict["online"] = "true";
            }
            var now = DateTime.Now;

            if (!info.FechaExpiracion.HasValue)
            {
                info.PasaporteColor = "Gris";
            }
            else
            {
                var dateCompare = DateTime.Compare(info.FechaExpiracion.Value, now);
                if (dateCompare < 0) //ha caducado, la fecha de expiración es anterior a la fecha actual
                {
                    info.PasaporteColor = "Gris";
                }
            }
            dict["color"] = info.PasaporteColor;
            string hashCode = SHA1(info.IdEmpleado.ToString());

            dict["empleado"] = hashCode;
            var loc = Locator.Current.GetService <AppSession>().Location;

            if (loc != null)
            {
                dict["pais"]        = loc.Pais;
                dict["ciudad"]      = loc.Ciudad;
                dict["centro"]      = loc.Name;
                dict["centroId"]    = loc.IdLocation.ToString();
                dict["centroExtra"] = loc.Extra != null?loc.Extra:"";
            }
            if (info.PasaporteColor.Equals("Verde"))
            {
                View.AskTemperature();
            }
            else
            {
                dict["temperatura"] = "NA";
                Analytics.TrackEvent("SeguridadPasaporte", dict);
                View.SetInfo(info, online);
                SendInfo();
            }
        }
Example #12
0
        private void btnCreateQR_Click(object sender, EventArgs e)
        {
            byte[]      data           = Encoding.UTF8.GetBytes(txtData.Text);
            int         version        = (int)numVersion.Value;
            MaskVersion maskVersion    = (MaskVersion)cmbMask.SelectedIndex;
            int         cellSize       = (int)numCellSize.Value;
            int         halftone       = (int)numHalftone.Value;
            int         maxError       = (int)numMaxError.Value;
            int         blackThreshold = (int)numBlackThreshold.Value;
            int         whiteThreshold = (int)numWhiteThreshold.Value;
            int         deviation      = (int)numDeviation.Value;

            dataMode = dataMode ?? DataEncoder.GuessMode(data);
            if (version == 0)
            {
                version = DataEncoder.GuessVersion(data.Length, eccLevel, dataMode.Value);
            }
            var template = picTemplate.Image as Bitmap;

            var pixels = QRCodeMagician.GetImagePixel(version, template, cellSize, halftone, deviation);
            var qr     = QRCodeMagician.ImageArt(dataMode.Value, version, eccLevel, maskVersion, data, pixels, maxError);
            int N      = qr.N;

            var fixedBlackBrush = Brushes.Black;
            var fixedWhiteBrush = Brushes.White;
            var blackBrush      = Brushes.Black;
            var whiteBrush      = Brushes.White;
            int margin          = halftone;

            if (halftone <= 0 || halftone >= cellSize)
            {
                halftone = cellSize;
                margin   = 0;
            }

            var bitmap = new Bitmap((N + 2) * cellSize, (N + 2) * cellSize);

            using (var g = Graphics.FromImage(bitmap)) {
                g.Clear(Color.White);
                g.DrawImage(template, new Rectangle(cellSize, cellSize, N * cellSize, N * cellSize));
                for (int x = 0; x < N; x++)
                {
                    for (int y = 0; y < N; y++)
                    {
                        var drawX = x + 1;
                        var drawY = y + 1;

                        if (margin == 0)
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(blackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, halftone, halftone));
                            }
                            else
                            {
                                g.FillRectangle(whiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, halftone, halftone));
                            }
                            continue;
                        }

                        if (qr[x, y].Type == QRValueType.TimingPatterns)
                        {
                            continue;
                        }

                        //if (qr[x, y].Type == QRValueType.Fixed || qr[x, y].Type == QRValueType.TimingPatterns || qr[x, y].Type == QRValueType.Format || qr[x, y].Type == QRValueType.Version) {
                        if (qr[x, y].Type == QRValueType.Fixed || qr[x, y].Type == QRValueType.TimingPatterns)
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(fixedBlackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                            else
                            {
                                g.FillRectangle(fixedWhiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                        }
                        else if (!pixels[x, y].HasFlag(ImagePixel.Stable) || qr[x, y].Value != pixels[x, y].HasFlag(ImagePixel.Black))
                        {
                            var brush = qr[x, y].Value ? blackBrush : whiteBrush;
                            g.FillRectangle(brush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                        }
                    }
                }
            }

            var bitmap2 = new Bitmap((N + 2) * cellSize, (N + 2) * cellSize);

            using (var g = Graphics.FromImage(bitmap2)) {
                g.Clear(Color.White);
                g.DrawImage(template, new Rectangle(cellSize, cellSize, N * cellSize, N * cellSize));
                for (int x = 0; x < N; x++)
                {
                    for (int y = 0; y < N; y++)
                    {
                        var drawX = x + 1;
                        var drawY = y + 1;

                        if (margin == 0)
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(blackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, halftone, halftone));
                            }
                            else
                            {
                                g.FillRectangle(whiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, halftone, halftone));
                            }
                            continue;
                        }

                        if (qr[x, y].Type == QRValueType.TimingPatterns)
                        {
                            continue;
                        }

                        //if (qr[x, y].Type == QRValueType.Fixed || qr[x, y].Type == QRValueType.TimingPatterns || qr[x, y].Type == QRValueType.Format || qr[x, y].Type == QRValueType.Version) {
                        if (qr[x, y].Type == QRValueType.Fixed || qr[x, y].Type == QRValueType.TimingPatterns)
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(fixedBlackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                            else
                            {
                                g.FillRectangle(fixedWhiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                        }
                        else
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(blackBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            }
                            else
                            {
                                g.FillRectangle(whiteBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            }
                        }
                    }
                }
            }


            var(binarizerBtimap, pixels2) = QRCodeMagician.GetBinarizer(version, template, cellSize, halftone, deviation);
            qr = QRCodeMagician.ImageArt(dataMode.Value, version, eccLevel, maskVersion, data, pixels2, maxError);
            var bitmap3 = new Bitmap((N + 2) * cellSize, (N + 2) * cellSize);

            using (var g = Graphics.FromImage(bitmap3)) {
                g.Clear(Color.White);
                g.DrawImage((binarizerBtimap), new Rectangle(cellSize, cellSize, N * cellSize, N * cellSize));
                for (int x = 0; x < N; x++)
                {
                    for (int y = 0; y < N; y++)
                    {
                        var drawX = x + 1;
                        var drawY = y + 1;

                        if (margin == 0)
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(blackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, halftone, halftone));
                            }
                            else
                            {
                                g.FillRectangle(whiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, halftone, halftone));
                            }
                            continue;
                        }

                        // if (qr[x, y].Type == QRValueType.TimingPatterns) continue;

                        if (qr[x, y].Type == QRValueType.Fixed || qr[x, y].Type == QRValueType.TimingPatterns)
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(fixedBlackBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                            else
                            {
                                g.FillRectangle(fixedWhiteBrush, new Rectangle(drawX * cellSize, drawY * cellSize, cellSize, cellSize));
                            }
                        }
                        else if (!pixels2[x, y].HasFlag(ImagePixel.Stable) || qr[x, y].Value != pixels2[x, y].HasFlag(ImagePixel.Black))
                        {
                            if (qr[x, y].Value)
                            {
                                g.FillRectangle(blackBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            }
                            else
                            {
                                g.FillRectangle(whiteBrush, new Rectangle(drawX * cellSize + halftone, drawY * cellSize + halftone, halftone, halftone));
                            }
                        }
                    }
                }
            }

            WindowManager <FrmView> .Get().Text = $"最大允许错误:{qr.MaxErrorAllowBytes}×{QRInfo.GetEccInfo(version, eccLevel).BlocksInGroup1 + QRInfo.GetEccInfo(version, eccLevel).BlocksInGroup2}";

            WindowManager <FrmView> .Get().picView.Image = bitmap;

            WindowManager <FrmView> .Get().picView2.Image = bitmap2;

            WindowManager <FrmView> .Get().picView3.Image = HybridBinarizer.BinarizerBitmap(bitmap);

            WindowManager <FrmView> .Get().picView4.Image = bitmap3;

            WindowManager <FrmView> .Get().Show();
        }
Example #13
0
        static void Main(string[] args)
        {
            //var g = new GF.XPolynom(GF.FromExponent(0), GF.FromExponent(0));
            //var eccNum = 2;
            //for (int i = 1; i < eccNum; i++) {
            //	g *= new GF.XPolynom(GF.FromExponent(i), GF.FromExponent(0));
            //}

            //var r = new GF.XPolynom[8 * eccNum];
            //for (int i = 0; i < 8 * eccNum; i++) {
            //	var msg = new GF.XPolynom(eccNum * 2 + 1);
            //	// msg[eccNum * 2] = GF.FromPolynom(0x55);
            //	msg[eccNum * 2 - 1 - i / 8] = GF.FromPolynom(1 << (7 - i % 8));

            //	r[i] = msg % g;
            //	System.Console.WriteLine(Convert.ToString(r[i][0].Polynom, 2).PadLeft(8, '0') + "," + Convert.ToString(r[i][1].Polynom, 2).PadLeft(8, '0'));
            //}
            //System.Console.WriteLine();
            //{
            //	var msg = new GF.XPolynom(eccNum * 2 + 1);
            //	// msg[eccNum * 2] = GF.FromPolynom(0x55);
            //	// msg[eccNum * 2 - 1] = GF.FromPolynom(0b11000000);
            //	//var r0 = msg % g;
            //	//System.Console.WriteLine(Convert.ToString(r0[0].Polynom, 2).PadLeft(8, '0') + "," + Convert.ToString(r0[1].Polynom, 2).PadLeft(8, '0'));

            //	msg[eccNum * 2 - 1] = GF.FromPolynom(0b10000000);
            //	msg[eccNum * 2 - 2] = GF.FromPolynom(0b00000001);
            //	var r0 = msg % g;
            //	System.Console.WriteLine(Convert.ToString(r0[0].Polynom, 2).PadLeft(8, '0') + "," + Convert.ToString(r0[1].Polynom, 2).PadLeft(8, '0'));
            //}



            //byte[] data1 = Encoding.UTF8.GetBytes("17689480023");
            //byte[] data2 = Encoding.UTF8.GetBytes("15059723108");
            //var (qr1, qr2, swap) = QRCodeMagician.CreateObfuscatedQRCode(data1, data2);
            //if (qr1 == null) { System.Console.WriteLine("失败"); return; }
            //Save(@"Z:\qr1.png", qr1, null, 5);
            //Save(@"Z:\qr2.png", qr2, null, 5);
            //Save(@"Z:\qr12.png", qr1, qr2, 5);
            //Save(@"Z:\qr21.png", qr2, qr1, 5);
            //SaveObfuscated(@"Z:\qr.png", qr1, qr2, 5);
            //System.Console.WriteLine("成功");
            //var qr = new QRCode(data1);
            //Save(@"Z:\qr.png", qr, null, 5);

            //var r1 = QRDataEncoder.CalculateECCWords(new byte[] { 1,3,2 }, 2);
            //var r2 = QRDataEncoder.CalculateECCWords(new byte[] { 2 }, 2);
            //var r3 = QRDataEncoder.CalculateECCWords(new byte[] { 1, 2 }, 4);

            // System.IO.File.WriteAllBytes(@"D:\MyDocuments\Desktop\1.bin", new byte[] { 1 });

            //const int N = 5;
            //const int M = 5;
            //var left = new byte[N][];
            //var right = new byte[N][];
            //for (int i = 0; i < N; i++) {
            //	left[i] = new byte[N];
            //	left[i][i] = 1;
            //	right[i] = new byte[M];
            //}
            //Random random = new Random();
            //for (int i = 0; i < N; i++) {
            //	for (int j = 0; j < M; j++) {
            //		right[i][j] = (byte) (random.Next(10) < 2 ? 1 : 0);
            //	}
            //}

            //Print(left, right);
            //System.Console.WriteLine();
            //List<int> indexes;
            //(indexes, right) = BitBlock.GaussianElimination(left, right);
            //Print(left, right);

            //for (int i = 0; i < indexes.Count; i++) {
            //	System.Console.Write(indexes[i] + " ");
            //}
            //System.Console.WriteLine();

            int version = 20;

            byte[] data1   = Encoding.UTF8.GetBytes("0.0");
            var    N       = QRInfo.GetN(version);
            int    padding = 6;
            // byte[] data1 = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
            var pixels = new ImagePixel[N, N];

            for (int x = 0; x < pixels.GetLength(0); x++)
            {
                for (int y = 0; y < pixels.GetLength(1); y++)
                {
                    //if (x > 15) {
                    //	pixels[x, y] = ImagePixel.White;
                    //} else if (x <= 4) {
                    //	pixels[x, y] = ImagePixel.White;
                    //} else {
                    //	pixels[x, y] = ImagePixel.Any;
                    //}
                    //if (x >= 11 || y <= 8) {
                    //	pixels[x, y] = ImagePixel.White;
                    //} else {
                    //	pixels[x, y] = ImagePixel.Any;
                    //}

                    if (y >= padding && y < N - padding && x >= padding && x < N - padding)
                    {
                        pixels[x, y] = y % 2 == 0 ? ImagePixel.White : ImagePixel.Black;
                    }
                    else
                    {
                        pixels[x, y] = ImagePixel.Any | ImagePixel.White;
                    }
                }
            }
            //pixels[0, 9] = ImagePixel.Black;
            //pixels[0, 10] = ImagePixel.Black;
            //pixels[0, 11] = ImagePixel.Black;
            //pixels[0, 12] = ImagePixel.Black;
            //pixels[1, 9] = ImagePixel.Black;
            //pixels[1, 10] = ImagePixel.Black;
            //pixels[1, 11] = ImagePixel.Black;
            //pixels[1, 12] = ImagePixel.Black;
            //pixels[9, 0] = ImagePixel.Any;
            //pixels[10, 0] = ImagePixel.Any;
            //pixels[11, 0] = ImagePixel.Any;
            //pixels[12, 0] = ImagePixel.Any;
            ////pixels[9, 1 ]= ImagePixel.Any;
            //pixels[10, 1] = ImagePixel.Any;
            //pixels[11, 1] = ImagePixel.Any;
            //pixels[12, 1] = ImagePixel.Any;

            int cellSize = 5;

            pixels = QRCodeMagician.GetImagePixel(version, new Bitmap(@"Z:\1.png"), cellSize);
            var qr = QRCodeMagician.ImageArt(DataMode.Byte, version, ECCLevel.L, MaskVersion.Version100, data1, pixels, QRInfo.GetMaxErrorAllowBytes(version, ECCLevel.L) / 2);

            Save(@"Z:\art.png", qr, null, cellSize);

            var qr2 = QRCodeMagician.ImageArt(DataMode.Byte, version, ECCLevel.L, MaskVersion.Version100, data1, pixels);

            Save(@"Z:\art2.png", qr2, null, cellSize);

            //var bits = new BitSet(1000);
            //bits[3] = true;
            //var r1 = GF.XPolynom.RSEncode(bits.ByteArray, 0, bits.ByteArray.Length, 100);
            //bits[3] = false;
            //bits[300] = true;
            //var r2 = GF.XPolynom.RSEncode(bits.ByteArray, 0, bits.ByteArray.Length, 100);
            //bits[3] = true;
            //var r3 = GF.XPolynom.RSEncode(bits.ByteArray, 0, bits.ByteArray.Length, 100);
        }
Example #14
0
        public async Task NextClicked(string document, string phone)
        {
            if (document.Trim().Length == 0)
            {
                View.ShowDialog("document_error", "msg_ok", null);
                return;
            }
            View.ShowLoading();
            var response = await getUserPaperUseCase.Execute(document, phone);

            if (response.ErrorCode > 0)
            {
                View.HideLoading();
                View.ShowDialog(response.Message, "msg_ok", null);
            }
            else
            {
                var passportresponse = await getSecurityPassportUseCase.Execute(response.Data.IdEmpleado);

                if (passportresponse.ErrorCode > 0)
                {
                    View.ShowResult(response.Data);
                }
                else if (passportresponse.Data == null)
                {
                    View.ShowResult(response.Data);
                }
                else
                {
                    var info = new QRInfo()
                    {
                        IdEmpleado      = passportresponse.Data.IdEmpleado,
                        FechaExpiracion = passportresponse.Data.FechaExpiracion,
                        PasaporteColor  = passportresponse.Data.ColorPasaporte,
                        Manual          = true
                    };
                    var now = DateTime.Now;
                    if (!info.FechaExpiracion.HasValue)
                    {
                        View.ShowResult(response.Data);
                    }
                    else
                    {
                        var dateCompare = DateTime.Compare(info.FechaExpiracion.Value, now);
                        if (dateCompare < 0) //ha caducado, la fecha de expiración es anterior a la fecha actual
                        {
                            View.ShowResult(response.Data);
                        }
                        else if (passportresponse.Data.ColorPasaporte == "Gris")
                        {
                            View.ShowResult(response.Data);
                        }
                        else
                        {
                            Locator.Current.GetService <AppSession>().QRInfo = info;
                            navigator.GoToResult();
                        }
                    }
                }
            }
            View.HideLoading();
        }
Example #15
0
        private static void NewMethod1()
        {
            Random    random  = new Random();
            const int Version = 6;
            var       data    = Encoding.UTF8.GetBytes("0.0");
            int       N       = QRInfo.GetN(Version);

            ImagePixel[,] pixels = new ImagePixel[N, N];
            const int range = 7;

            for (int y = 0; y < N; y++)
            {
                for (int x = 0; x < N; x++)
                {
                    if (y < N / 2 && random.NextDouble() < (N / 2 - y) / (double)range)
                    {
                        pixels[x, y] = ImagePixel.Black;
                    }
                    else if (y > N / 2 && random.NextDouble() < (y - N / 2) / (double)range)
                    {
                        pixels[x, y] = ImagePixel.White;
                    }
                    else if (y < N / 2)
                    {
                        pixels[x, y] = ImagePixel.Black | ImagePixel.Any;
                    }
                    else
                    {
                        pixels[x, y] = ImagePixel.White | ImagePixel.Any;
                    }
                }
            }
            var qrcode = QRCodeMagician.ImageArt(DataMode.Alphanumeric, Version, ECCLevel.L, MaskVersion.Version010, data, pixels);


            for (int y = 0; y < N; y++)
            {
                for (int x = 0; x < N; x++)
                {
                    void SetValue(bool value)
                    {
                        switch (qrcode[x, y].Type)
                        {
                        case QRValueType.Data:
                        case QRValueType.DataPadding:
                        case QRValueType.Ecc:
                        case QRValueType.TimingPatterns:
                        case QRValueType.FixedPoint:
                        case QRValueType.Padding:
                            qrcode[x, y].Value = value;
                            break;
                        }
                    }

                    if (y < N / 2 - range)
                    {
                        SetValue(true);
                    }
                    else if (y > N / 2 + range)
                    {
                        SetValue(false);
                    }
                    else if (qrcode[x, y].Type == QRValueType.TimingPatterns)
                    {
                        SetValue(y < N / 2);
                    }
                }
            }
            Save(@"Z:\out.png", qrcode, null, 6);
        }