protected virtual Exception checkCarrierDataIsComplete()
        {
            if (String.IsNullOrEmpty(_invItem.CarrierType))
            {
                return(new InvoiceException("上傳載具資料不完全,請檢查;1.載具類別、2.顯碼或隱瑪至少填一。"));
            }
            else
            {
                if (_invItem.CarrierType.Length > 6 || (_invItem.CarrierId1 != null && _invItem.CarrierId1.Length > 64) || (_invItem.CarrierId2 != null && _invItem.CarrierId2.Length > 64))
                {
                    return(new InvoiceException(String.Format("載具類別或顯碼ID、隱碼ID的長度超出限制;載具類別:6碼、顯碼及隱碼ID:64。上傳資料→載具類別 {0}、顯碼ID {1}、隱碼ID {2}。", _invItem.CarrierType, _invItem.CarrierId1, _invItem.CarrierId2)));
                }

                _carrier = new InvoiceCarrier
                {
                    CarrierType = _invItem.CarrierType
                };

                if (!String.IsNullOrEmpty(_invItem.CarrierId1))
                {
                    if (_invItem.CarrierId1.Length > 64)
                    {
                        return(new InvoiceException(String.Format("載具類別或顯碼ID、隱碼ID的長度超出限制;載具類別:6碼、顯碼及隱碼ID:64。上傳資料→載具類別 {0}、顯碼ID {1}、隱碼ID {2}。", _invItem.CarrierType, _invItem.CarrierId1, _invItem.CarrierId2)));
                    }

                    _carrier.CarrierNo = _invItem.CarrierId1;
                }

                if (!String.IsNullOrEmpty(_invItem.CarrierId2))
                {
                    if (_invItem.CarrierId2.Length > 64)
                    {
                        return(new InvoiceException(String.Format("載具類別或顯碼ID、隱碼ID的長度超出限制;載具類別:6碼、顯碼及隱碼ID:64。上傳資料→載具類別 {0}、顯碼ID {1}、隱碼ID {2}。", _invItem.CarrierType, _invItem.CarrierId1, _invItem.CarrierId2)));
                    }

                    _carrier.CarrierNo2 = _invItem.CarrierId2;
                }

                if (_carrier.CarrierNo == null)
                {
                    if (_carrier.CarrierNo2 == null)
                    {
                        return(new InvoiceException("上傳載具資料不完全,請檢查;1.載具類別、2.顯碼或隱瑪至少填一。"));
                    }
                    else
                    {
                        _carrier.CarrierNo = _carrier.CarrierNo2;
                    }
                }
                else
                {
                    if (_carrier.CarrierNo2 == null)
                    {
                        _carrier.CarrierNo2 = _carrier.CarrierNo;
                    }
                }
            }

            return(null);
        }
        protected virtual InvoiceException checkPublicCarrier()
        {
            if (_invItem.CarrierType == __CELLPHONE_BARCODE)
            {
                _invItem.CarrierId1 = _invItem.CarrierId1.GetEfficientString()?.ToUpper();
                _invItem.CarrierId2 = _invItem.CarrierId2.GetEfficientString()?.ToUpper();

                if (checkPublicCarrierId(_invItem.CarrierId1))
                {
                    _carrier = new InvoiceCarrier
                    {
                        CarrierType = _invItem.CarrierType,
                        CarrierNo   = _invItem.CarrierId1,
                        CarrierNo2  = _invItem.CarrierId1
                    };

                    return(null);
                }
                else if (checkPublicCarrierId(_invItem.CarrierId2))
                {
                    _carrier = new InvoiceCarrier
                    {
                        CarrierType = _invItem.CarrierType,
                        CarrierNo   = _invItem.CarrierId2,
                        CarrierNo2  = _invItem.CarrierId2
                    };

                    return(null);
                }
            }
            else if (_invItem.CarrierType == __自然人憑證)
            {
                if (_invItem.CarrierId1 != null && Regex.IsMatch(_invItem.CarrierId1, "^[A-Z]{2}[0-9]{14}$"))
                {
                    _carrier = new InvoiceCarrier
                    {
                        CarrierType = _invItem.CarrierType,
                        CarrierNo   = _invItem.CarrierId1,
                        CarrierNo2  = _invItem.CarrierId1
                    };

                    return(null);
                }
                else if (_invItem.CarrierId2 != null && Regex.IsMatch(_invItem.CarrierId2, "^[A-Z]{2}[0-9]{14}$"))
                {
                    _carrier = new InvoiceCarrier
                    {
                        CarrierType = _invItem.CarrierType,
                        CarrierNo   = _invItem.CarrierId2,
                        CarrierNo2  = _invItem.CarrierId2
                    };

                    return(null);
                }
            }

            return(new InvoiceException("載具號碼、類別不符合共通性載具")
            {
                RequestName = "CarrierId1"
            });
        }