精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

二維碼是什么?二維碼有什么用?二維碼繪制過程?二維碼如何生成?

開發 前端
EncodeHintType 代表二維碼的一些格式化參數,可以指定二維碼的糾錯級別、字符集、外邊框(白色邊框)的寬度、二維碼版本(QR_VERSION)等。

二維碼介紹

二維碼是一種能夠存儲信息并可以被電子設備掃描和解碼的圖形。通常是由黑色和白色的方塊或點組成,以正方形或矩形的方式排列,用于存儲網址、文本、電子郵件地址、電話號碼、社交媒體鏈接等各種信息。

二維碼的普及主要得益于智能手機的廣泛使用和移動互聯網的快速發展。二維碼已經廣泛應用于各種場景:

  1. 商業營銷:商家可以將產品信息、優惠活動等信息編碼到二維碼中,顧客掃描后可以直接訪問相關網頁或下載應用。
  2. 社交媒體:個人可以將自己的社交媒體賬號或聯系方式編碼到二維碼中,方便他人快速添加。
  3. 支付:移動支付應用支持二維碼支付,用戶只需掃描商家的二維碼即可完成支付。
  4. 票務:電影票、演唱會票等通過二維碼進行驗證和入場。
  5. 物流:物流公司將包裹信息編碼到二維碼中,方便收件人查詢物流狀態。

Version

Version是指二維碼的規格或矩陣大小,決定了二維碼可以存儲的數據量。從Version 1到Version 40共有40種不同的規格。

  1. 「版本編號」:Version 1是起始版本,Version 40是最高版本。
  2. 「矩陣大小」:每個版本的二維碼都由一個正方形的矩陣構成。Version 1的矩陣是21x21的,每增加一個版本,矩陣的每一邊都增加4個模塊。Version 2是25x25的矩陣,Version 3是29x29的矩陣,以此類推。最高版本Version 40的矩陣大小是177x177。
  3. 「計算公式」:矩陣大小的計算公式 (V-1) * 4 + 21,V是版本號。例如,Version 40的矩陣大小就是 (40-1) * 4 + 21 = 177。
  4. 「存儲容量」:隨著版本號的增加,二維碼可以存儲的數據量也相應增加。版本越高,二維碼的容量越大,即可承載的內容越多。具體來說,Version 1的二維碼最多可以儲存25個字符或41個數字,Version 40的二維碼最多可以儲存4296個字符或7089個數字。
  5. 「實際應用」:在實際應用中,二維碼的尺寸制定要看二維碼包含多少內容以及是什么內容。如果是文字信息,就需要尺寸大一些,二維碼生成的時候字符越多,二維碼點陣就越密,當二維碼密度比較大的時候需要印大一些才不會影響掃描效果。

定位圖案

定位圖案主要用于確定二維碼的方向和位置,確保掃描設備能夠準確識別和解碼二維碼。幫助掃描設備快速找到二維碼的邊界,并確定數據區域的位置。

「定位圖案的組成」

  1. 「位置探測圖形(Position Detection Pattern)」:最主要的定位圖案,由三個黑色正方形組成,分別位于二維碼的左上角、右上角和左下角。三個正方形內部還有一些白色的小正方形,與定位正方形的邊緣之間有一些白色間隔(Separators for Position Detection Patterns)。三個定位圖案足夠標識一個矩形,因此不需要第四個。
  2. 「定位符(Timing Patterns)」:用于定位的線條,位于二維碼的頂部和底部,以及左側和右側。由于二維碼有多種尺寸(從Version 1到Version 40共有40種不同的規格),當尺寸變大時,需要這些定位符作為標準線,以確保掃描時不會偏移。
  3. 「對齊圖案(Alignment Patterns)」:從Version 2開始才出現的定位圖案。通常出現在二維碼的中間部分,同樣是為了輔助定位。隨著版本號的增加,對齊圖案的數量也會增加。

「定位圖案的識別」在掃描二維碼時,掃描設備首先會尋找并識別這些定位圖案。一旦定位圖案被識別,掃描設備就可以確定二維碼的邊界,并進一步解析數據區域中的信息。

功能性數據

功能性數據主要包括格式信息(Format Information),存在于所有尺寸二維碼中的關鍵數據部分。

「格式信息(Format Information)」

  1. 「作用」:格式信息用于存放一些格式化數據,告訴掃描設備如何解碼二維碼中的信息。
  2. 「位置」:格式信息位于二維碼的三個位置探測圖形(Position Detection Pattern)附近(二維碼的左上角、右上角和左下角)。
  3. 「內容」:格式信息包含二維碼的糾錯級別(Error Correction Level)和掩碼(Mask)等信息。糾錯級別決定了二維碼在受損時能被正確識別的能力,掩碼則是用于優化二維碼的視覺效果和數據密度的。

「其他功能性數據」

二維碼還包含其他功能性數據,如版本信息(Version Information,僅當二維碼的版本大于1時才存在)、數據和糾錯碼字等。這些數據都按照特定的格式和規則進行編碼和排列,確保二維碼的準確性和可讀性。

「數據編碼方式」

二維碼使用了一種稱為“二進制位流”的方式來編碼信息。使用了一系列的0和1(即二進制位)來表示不同的字符、數字或指令。通過特定的算法進行編碼和排列,形成了看到的黑白相間的方塊圖案。

數據碼和糾錯碼

數據碼和糾錯碼是編碼結構中的重要組成部分,共同確保了二維碼信息的準確性和可靠性。

「數據碼(Data Code)」

數據碼是二維碼中存儲的實際數據,數據可以是文本、網址、數字、電子郵件地址等。在二維碼的編碼過程中,數據首先被轉換成二進制位流,然后按照特定的規則進行編碼和排列,形成二維碼中的黑白方塊圖案。

  1. 數值模式(Numeric Mode):用于編碼0-9的數字,每個數字由4位二進制數表示。
  2. 字母數字模式(Alphanumeric Mode):用于編碼數字、大寫字母(A-Z)、部分小寫字母(a, e, i, o, u)以及一些符號(如$、%、*、+、-、.、/、:),每個字符由6位二進制數表示。

圖片圖片

  1. 字節模式(Byte Mode):用于編碼ASCII字符集中的所有字符,每個字符由8位二進制數表示。
  2. 漢字模式(Kanji Mode):用于編碼漢字,每個漢字由13位二進制數表示。

圖片圖片

「糾錯碼(Error Correction Code)」

糾錯碼是用于檢測和糾正錯誤的冗余數據。在二維碼的編碼過程中,糾錯碼是通過特定的算法生成的,被添加到數據碼之后。當掃描設備讀取二維碼時,首先會檢查糾錯碼,以檢測是否存在錯誤。如果檢測到錯誤,掃描設備會使用糾錯碼來糾正這些錯誤,確保讀取到的數據是準確的。

二維碼的糾錯能力可以通過設置不同的糾錯級別來調整:

  • L級(Low):能夠糾正約7%的數據碼錯誤。
  • M級(Medium):能夠糾正約15%的數據碼錯誤。
  • Q級(Quartile):能夠糾正約25%的數據碼錯誤。
  • H級(High):能夠糾正約30%的數據碼錯誤。

圖片圖片

糾錯碼的生成和糾錯過程使用Reed-Solomon算法來實現。通過向數據碼中添加冗余信息(即糾錯碼)來創建一種數學關系,在數據碼出現錯誤時,通過這種數學關系來恢復原始數據。

繪制二維碼

「確定要編碼的信息」:

選擇要編碼的信息,如文字、網址、電話號碼等。信息將被轉換為二維碼的數據碼。

「選擇合適的編碼模式」:

  • 根據信息的類型選擇合適的編碼模式,如數字模式、字母數字模式、字節模式或漢字模式等。不同的模式有不同的編碼效率和字符范圍。

「數據編碼」:

  • 將要編碼的信息根據所選的編碼模式轉換為二進制位流。例如,數字模式下每個數字用4位二進制表示,字母數字模式下每個字符用6位二進制表示。

「計算二維碼的版本和尺寸」:

  • 根據編碼后的數據量和所選的糾錯級別,確定二維碼的版本(Version)。版本決定了二維碼的矩陣大小,從Version 1(21x21)到Version 40(177x177)不等。

  • 根據版本和糾錯級別,確定二維碼的具體尺寸和結構,包括行數、列數、數據區域、校驗區域等。

「添加定位圖案」:

  • 在二維碼的左上角、右上角和左下角添加三個定位圖案(位置探測圖形),用于幫助掃描設備識別二維碼的方向和位置(無論Version如何,這個圖案的尺寸就是這么大)。

圖片圖片

「添加對齊圖案」:

從Version 2開始,在二維碼的中間部分添加對齊圖案(Alignment Patterns),有助于在掃描過程中校正二維碼的形狀和大小。

圖片圖片

「添加格式信息和版本信息」:

在二維碼的特定位置添加格式信息(Format Information),包含了糾錯級別和掩碼模式等關鍵信息。

如果二維碼的版本大于1,還需要添加版本信息(Version Information)。

圖片圖片

Formation Information是一個15個bits的信息,每一個bit的位置如下圖所示(注意圖中的Dark Module,那是永遠出現的)。

圖片圖片

Version Information一共是18個bits,其中包括6個bits的版本號以及12個bits的糾錯碼。

圖片圖片

「添加糾錯碼」:

根據所選的糾錯級別,為數據區域添加糾錯碼(Error Correction Code)。糾錯碼用于檢測和糾正掃描時可能產生的錯誤。

「掩模處理」:

  • 對數據區域進行掩模處理,通過改變數據區域中某些模塊的顏色來打破圖案中可能出現的規律性的過程,以提高掃描的可靠性。

圖片圖片

下面是Mask后的一些樣子,我們可以看到被某些Mask XOR了的數據變得比較零散了。

圖片圖片

「生成二維碼圖案」:

將經過掩模處理的數據區域和所有功能區域(如定位圖案、對齊圖案、格式信息和版本信息等)組合在一起,生成最終的二維碼圖案。

圖片圖片

「保存和使用二維碼」:

保存生成的二維碼圖案,并可以根據需要將其打印出來或發布到網站、社交媒體等平臺上供用戶掃描使用。

代碼生成二維碼

使用zxing生成二維碼

  1. 引入Zxing庫 在項目中引入Zxing庫,在build.gradle中添加相應的依賴:
dependencies {  
    implementation 'com.google.zxing:core:3.5.3'  
}
  1. 創建QRCodeWriter對象 QRCodeWriter是Zxing庫中的一個類,用于生成二維碼。
QRCodeWriter qrCodeWriter = new QRCodeWriter();
  1. 設置二維碼參數 設置二維碼的尺寸、糾錯級別等參數。
int width = 350; // 二維碼寬度
int height = 350; // 二維碼高度
ErrorCorrectionLevel errorCorrectionLevel = ErrorCorrectionLevel.M; // 糾錯級別
HashMap<EncodeHintType, ErrorCorrectionLevel> hints = new HashMap<>();
hints.put(EncodeHintType.ERROR_CORRECTION, errorCorrectionLevel);
  1. 調用QRCodeWriter的encode方法生成BitMatrix

將需要編碼的字符串和參數傳遞給QRCodeWriter的encode方法,生成一個BitMatrix對象。

String text = "沐雨花飛蝶";
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
  1. 將BitMatrix轉換為圖片
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();  
Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
  1. 顯示或保存二維碼

將生成的bitmap其設置給ImageView在屏幕上顯示,或者保存到文件系統中。

使用第三方zxing-lite生成二維碼

ZXingLite for Android 是ZXing的精簡極速版,基于ZXing庫優化掃碼和生成二維碼/條形碼功能,掃碼界面完全支持自定義;使用ZXingLite可快速實現掃碼識別相關功能。

  1. 引入zxing-lite庫 在項目中引入zxing-lite庫,在build.gradle中添加相應的依賴:
dependencies {  
    // AndroidX 版本
    implementation 'com.github.jenly1314:zxing-lite:3.1.1'
}
  1. 利用CodeUtils可以生成一個二維碼的bitmap
private fun generateQRcode(content: String, ratio: Float): Bitmap {
    val icon = BitmapFactory.decodeResource(resources, R.drawable.ic_default_profile)
    val qrCode: Bitmap = CodeUtils.createQRCode(content, 600, icon, ratio)
    return qrCode
}

CodeUtil代碼實現:

/**
  * 生成二維碼
  * @param content 二維碼的內容
  * @param heightPix 二維碼的高
  * @param logo 二維碼中間的logo
  * @param ratio  logo所占比例 因為二維碼的最大容錯率為30%,所以建議ratio的范圍小于0.3
  * @return
*/
public static Bitmap createQRCode(String content, int heightPix, Bitmap logo,@FloatRange(from = 0.0f,to = 1.0f)float ratio) {
    //配置參數
    Map<EncodeHintType, Object> hints = new HashMap<>();
    hints.put( EncodeHintType.CHARACTER_SET, "utf-8");
    //容錯級別
    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
    //設置空白邊距的寬度
    hints.put(EncodeHintType.MARGIN, 1); //default is 4
    return createQRCode(content,heightPix,logo,ratio,hints);
}

public static Bitmap createQRCode(String content, int heightPix, Bitmap logo,@FloatRange(from = 0.0f,to = 1.0f)float ratio,Map<EncodeHintType,?> hints,int codeColor) {
    try {

        // 圖像數據轉換,使用了矩陣轉換
        BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, heightPix, heightPix, hints);
        int[] pixels = new int[heightPix * heightPix];
        // 下面這里按照二維碼的算法,逐個生成二維碼的圖片,
        // 兩個for循環是圖片橫列掃描的結果
        for (int y = 0; y < heightPix; y++) {
            for (int x = 0; x < heightPix; x++) {
                if (bitMatrix.get(x, y)) {
                    pixels[y * heightPix + x] = codeColor;
                } else {
                    pixels[y * heightPix + x] = Color.WHITE;
                }
            }
        }

        // 生成二維碼圖片的格式
        Bitmap bitmap = Bitmap.createBitmap(heightPix, heightPix, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, heightPix, 0, 0, heightPix, heightPix);

        if (logo != null) {
            bitmap = addLogo(bitmap, logo,ratio);
        }

        return bitmap;
    } catch (WriterException e) {
        Log.w(CaptureHelper.TAG,e.getMessage());
    }
    return null;
}

二維碼生成最核心的代碼:

BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, heightPix, heightPix, hints);

@Override
public BitMatrix encode(String contents,
                        BarcodeFormat format,
                        int width,
                        int height,
                        Map<EncodeHintType,?> hints) throws WriterException {

    if (contents.isEmpty()) {
        throw new IllegalArgumentException("Found empty contents");
    }

    if (format != BarcodeFormat.QR_CODE) {
      throw new IllegalArgumentException("Can only encode QR_CODE, but got " + format);
    }

    if (width < 0 || height < 0) {
      throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' +
          height);
    }

    ErrorCorrectionLevel errorCorrectionLevel = ErrorCorrectionLevel.L;
    int quietZone = QUIET_ZONE_SIZE;
    if (hints != null) {
      if (hints.containsKey(EncodeHintType.ERROR_CORRECTION)) {
        errorCorrectionLevel = ErrorCorrectionLevel.valueOf(hints.get(EncodeHintType.ERROR_CORRECTION).toString());
      }
      if (hints.containsKey(EncodeHintType.MARGIN)) {
        quietZone = Integer.parseInt(hints.get(EncodeHintType.MARGIN).toString());
      }
    }

    QRCode code = Encoder.encode(contents, errorCorrectionLevel, hints);
    return renderResult(code, width, height, quietZone);
}
public enum EncodeHintType {

  /**
   * Specifies what degree of error correction to use, for example in QR Codes.
   * Type depends on the encoder. For example for QR codes it's type
   * {@link com.google.zxing.qrcode.decoder.ErrorCorrectionLevel ErrorCorrectionLevel}.
   * For Aztec it is of type {@link Integer}, representing the minimal percentage of error correction words.
   * For PDF417 it is of type {@link Integer}, valid values being 0 to 8.
   * In all cases, it can also be a {@link String} representation of the desired value as well.
   * Note: an Aztec symbol should have a minimum of 25% EC words.
   */
  ERROR_CORRECTION,

  /**
   * Specifies what character encoding to use where applicable (type {@link String})
   */
  CHARACTER_SET,

  /**
   * Specifies the matrix shape for Data Matrix (type {@link com.google.zxing.datamatrix.encoder.SymbolShapeHint})
   */
  DATA_MATRIX_SHAPE,

  /**
   * Specifies a minimum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.
   *
   * @deprecated use width/height params in
   * {@link com.google.zxing.datamatrix.DataMatrixWriter#encode(String, BarcodeFormat, int, int)}
   */
  @Deprecated
  MIN_SIZE,

  /**
   * Specifies a maximum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.
   *
   * @deprecated without replacement
   */
  @Deprecated
  MAX_SIZE,

  /**
   * Specifies margin, in pixels, to use when generating the barcode. The meaning can vary
   * by format; for example it controls margin before and after the barcode horizontally for
   * most 1D formats. (Type {@link Integer}, or {@link String} representation of the integer value).
   */
  MARGIN,

  /**
   * Specifies whether to use compact mode for PDF417 (type {@link Boolean}, or "true" or "false"
   * {@link String} value).
   */
  PDF417_COMPACT,

  /**
   * Specifies what compaction mode to use for PDF417 (type
   * {@link com.google.zxing.pdf417.encoder.Compaction Compaction} or {@link String} value of one of its
   * enum values).
   */
  PDF417_COMPACTION,

  /**
   * Specifies the minimum and maximum number of rows and columns for PDF417 (type
   * {@link com.google.zxing.pdf417.encoder.Dimensions Dimensions}).
   */
  PDF417_DIMENSIONS,

  /**
   * Specifies the required number of layers for an Aztec code.
   * A negative number (-1, -2, -3, -4) specifies a compact Aztec code.
   * 0 indicates to use the minimum number of layers (the default).
   * A positive number (1, 2, .. 32) specifies a normal (non-compact) Aztec code.
   * (Type {@link Integer}, or {@link String} representation of the integer value).
   */
   AZTEC_LAYERS,

   /**
    * Specifies the exact version of QR code to be encoded.
    * (Type {@link Integer}, or {@link String} representation of the integer value).
    */
   QR_VERSION,

  /**
   * Specifies whether the data should be encoded to the GS1 standard (type {@link Boolean}, or "true" or "false"
   * {@link String } value).
   */
  GS1_FORMAT,
}

EncodeHintType 代表二維碼的一些格式化參數,可以指定二維碼的糾錯級別、字符集、外邊框(白色邊框)的寬度、二維碼版本(QR_VERSION)等。

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2013-01-30 12:16:49

二維碼NFC近場通訊

2023-11-17 09:07:51

.NET生成二維碼識別二維碼

2023-11-17 15:44:06

C++庫生成二維碼

2015-09-24 09:56:19

.NET二維碼

2011-12-06 16:40:45

二維碼快拍二維碼靈動快拍

2017-02-21 09:17:46

二維碼漏洞

2025-03-04 09:15:00

惡意軟件網絡安全郵件釣魚

2015-10-28 13:33:50

二維碼條形碼掃描源碼

2020-10-08 18:48:02

二維碼安全應用安全網絡攻擊

2014-03-05 14:41:55

二維碼登錄

2023-12-25 14:53:36

2012-04-01 09:53:13

二維碼

2013-03-27 16:13:17

Android開發Android二維碼生QR生成

2023-10-31 08:16:16

Go語言二維碼

2013-10-29 09:46:05

二維碼

2011-11-24 16:00:23

信息圖QR碼二維碼

2023-08-08 14:16:07

二維碼開發鴻蒙

2021-02-08 08:40:00

Zint二維碼開源

2015-11-09 13:03:47

JavaServlet創建二維碼

2020-10-26 11:09:42

二維碼網絡犯罪應用安全
點贊
收藏

51CTO技術棧公眾號

日本va欧美va欧美va精品| 激情视频极品美女日韩| 国产精品毛片a∨一区二区三区| 国产精品日韩欧美| 久久久久亚洲av无码专区体验| 日韩精品视频在线看| 狠狠色狠狠色综合日日五| 亚洲高清乱码| 手机在线精品视频| 麻豆精品在线播放| 国语自产精品视频在线看抢先版图片 | 欧美午夜片在线免费观看| 亚洲精品久久久久久一区二区| 国产成人精品亚洲精品色欲| 国产亚洲精品bv在线观看| 中文字幕亚洲一区二区三区| 国产精品九九视频| 国产第一精品| 懂色av一区二区三区| 黄色影视在线观看| 3p在线观看| av成人免费在线| 97在线电影| 中文字幕+乱码+中文字幕明步| 国产一区视频在线观看免费| 色综久久综合桃花网| 亚洲精品在线视频免费观看| 亚洲久草在线| 在线观看视频91| 国产日本在线播放| 八戒八戒神马在线电影| 欧美激情一区二区三区四区| 国产精品一区二区免费看| 夜夜躁很很躁日日躁麻豆| 久久国产免费| 51午夜精品视频| 久久人人爽人人爽人人| 亚洲综合中文| 色天天综合狠狠色| 极品人妻videosss人妻| 一区二区导航| 日韩国产一区三区| 久久午夜夜伦鲁鲁片| 国产精品极品在线观看| 91精品欧美一区二区三区综合在| 少妇一级淫免费放| 欧洲成人一区| 欧美在线你懂得| 国产一区二区在线视频播放| 国产理论电影在线| 一区二区三区av电影 | 国产福利在线播放麻豆| 国产精品美女一区二区三区| 日韩一区二区电影在线观看| 免费av在线电影| 91网站在线观看视频| 精品一区在线播放| 欧美另类自拍| 久久嫩草精品久久久精品| 久久综合福利| 国产69精品久久app免费版| 欧美激情一区二区在线| 亚洲欧美一区二区原创| 免费观看久久久久| 一区二区在线观看视频| a天堂资源在线观看| 高潮在线视频| 色哟哟精品一区| www.涩涩涩| 欧美视频三区| 精品91自产拍在线观看一区| 亚洲欧美日本一区| 国产欧美日韩影院| 久久躁狠狠躁夜夜爽| 九九热精彩视频| 国产精品嫩草99av在线| 国产精品亚发布| 国产手机av在线| 成人av免费在线观看| 蜜桃传媒视频麻豆第一区免费观看| 欧美香蕉爽爽人人爽| 中文字幕国产一区二区| 精品国产三级a∨在线| 成年网站在线视频网站| 日韩欧美国产骚| 五月天视频在线观看| 国产厕拍一区| 神马国产精品影院av| 精国产品一区二区三区a片| 久久福利一区| 91精品久久久久久久久久另类| 精品人妻少妇嫩草av无码专区| 99久久精品免费精品国产| 五月天久久狠狠| 成人超碰在线| 欧美日韩中字一区| 无码人妻精品一区二区三区99不卡| 伊人成综合网yiren22| 啊v视频在线一区二区三区| 国产一级在线观看视频| 免费精品视频在线| 国产伦理久久久| 伊人在线视频| 欧美日韩精品在线播放| 91国内在线播放| 伊甸园亚洲一区| 欧美国产精品人人做人人爱| 中文字幕一区二区三区四区视频| 白嫩亚洲一区二区三区| 制服丝袜亚洲色图| 毛片网站免费观看| 亚洲电影影音先锋| 日韩av观看网址| 懂色av一区二区三区四区| 中文字幕国产一区| jizzjizz国产精品喷水| 豆花视频一区| 中文字幕国产亚洲| 国产精品suv一区二区三区| 精品一二三四在线| 日本中文不卡| 成人bbav| 日韩欧美成人午夜| 日韩精品在线免费观看| jjzz黄色片| 首页国产精品| 国产91九色视频| 少妇又色又爽又黄的视频| 亚洲视频免费在线| 黄色三级视频在线| 九色精品国产蝌蚪| 欧美一级片一区| 色欲av永久无码精品无码蜜桃 | 四虎永久免费地址| 日韩国产在线一| 久久久久网址| 亚洲综合电影| 日韩精品极品在线观看| 国产性70yerg老太| 国产成人精品一区二区三区四区 | 乱人伦中文视频在线| 色94色欧美sute亚洲线路二| ass精品国模裸体欣赏pics| 亚洲激情精品| 国产伦一区二区三区色一情| 伊人福利在线| 日韩一区二区三区电影| 日日噜噜夜夜狠狠久久波多野| 麻豆一区二区99久久久久| 亚洲欧美日韩不卡一区二区三区| 视频精品导航| 中文字幕亚洲欧美日韩高清| 在线观看中文字幕网站| 国产精品久久夜| 亚洲第一天堂久久| 91久久高清国语自产拍| 成人午夜小视频| 精产国品自在线www| 欧美一区二区三区视频在线 | 黄色网址在线视频| 在线亚洲精品| 日本一区视频在线| 祥仔av免费一区二区三区四区| 日韩中文字幕在线| av中文字幕免费在线观看| 亚洲综合免费观看高清完整版在线| 成人做爰69片免费| 国产精品最新自拍| 亚洲欧美日韩综合一区| 秋霞午夜一区二区三区视频| 韩国19禁主播vip福利视频| 天堂av中文在线资源库| 欧美综合一区二区三区| 国产真实乱在线更新| 成人免费三级在线| 欧在线一二三四区| 99精品视频精品精品视频 | 精品在线91| 国产精品小说在线| 蜜桃成人365av| 亚洲精品中文字幕女同| 一级黄色片在线看| 亚洲国产日韩精品| 亚洲女优在线观看| 国产精品亚洲综合一区在线观看| 99久久国产综合精品五月天喷水| 九九综合在线| 91超碰rencao97精品| 黄色在线观看www| 亚洲四色影视在线观看| 99久久免费国产精精品| 日韩欧美成人精品| 99精品久久久久| 91丨国产丨九色丨pron| 91在线第一页| 可以看av的网站久久看| www.好吊操| 清纯唯美亚洲综合一区| 国产日韩久久| 亚洲国产综合在线观看| 91豆花精品一区| av电影免费在线观看| 亚洲欧美制服丝袜| 亚洲国产精品suv| 欧美日韩在线不卡| 五月婷婷中文字幕| 亚洲三级理论片| 亚洲欧美va天堂人熟伦| fc2成人免费人成在线观看播放| 日韩欧美亚洲另类| 久久久久国产精品午夜一区| 996这里只有精品| 日本不卡电影| 欧美激情第六页| 国产精品调教| 99爱精品视频| 青草综合视频| 国产成人一区二| 乡村艳史在线观看| 欧美激情视频给我| 国产剧情在线| 爽爽爽爽爽爽爽成人免费观看| 精品视频一二三| 精品香蕉在线观看视频一| 黄色成人一级片| 日韩一区二区三区电影在线观看| 亚洲网站免费观看| 欧美午夜宅男影院| 成人一二三四区| 日韩欧美亚洲范冰冰与中字| 日韩欧美不卡视频| 夜夜嗨av一区二区三区| 国产精品九九九九九九| 亚洲免费av网站| 日韩激情综合网| 亚洲视频一二区| 国产天堂av在线| 综合久久综合久久| 女人18毛片毛片毛片毛片区二| 欧美经典一区二区三区| 2019男人天堂| 国产精品久久毛片| 女人裸体性做爰全过| 国产精品日产欧美久久久久| 国产aaaaaaaaa| 国产精品三级在线观看| 无码人妻精品中文字幕| 国产精品成人在线观看| 任我爽在线视频| 亚洲欧美色一区| 欧美精品乱码视频一二专区| 一区二区三区 在线观看视频| 久久久久久免费观看| 亚洲综合一区二区三区| 丰满少妇乱子伦精品看片| 欧美日韩国产页| 日韩欧美在线观看免费| 在线观看91视频| 亚洲性在线观看| 日韩欧美国产一区二区三区| 国模人体一区二区| 日韩精品在线免费观看视频| 岛国视频免费在线观看| 日日狠狠久久偷偷四色综合免费| a毛片在线播放| 隔壁老王国产在线精品| 成人美女视频| 国产欧美中文字幕| 在线播放一区二区精品视频| 久久久久se| 国产精品99一区二区三| 日韩精品免费一区| 噜噜爱69成人精品| 99热一区二区| 粉嫩13p一区二区三区| 朝桐光av一区二区三区| 国产欧美日本一区二区三区| 黄色a级片在线观看| 舔着乳尖日韩一区| 在线观看不卡的av| 精品久久免费看| 国产乱理伦片a级在线观看| 久久av资源网站| 粉嫩一区二区| 亚洲xxxx在线| 精品美女在线视频| av磁力番号网| 久久久精品性| 最新中文字幕日本| 国产女人aaa级久久久级 | 自拍欧美日韩| 成人在线免费在线观看| 精品一二三四区| 99久久久久久久久久| 亚洲欧美视频一区| 亚洲高清视频免费观看| 日韩欧美国产三级| аⅴ资源新版在线天堂| 性色av一区二区三区免费| 国产美女久久| 久久久久网址| 欧美特黄a级高清免费大片a级| 久久精品视频91| 成人av网站在线观看免费| 欧美精品久久久久久久久46p| 色综合婷婷久久| 懂色av一区二区三区四区| 最新中文字幕亚洲| sis001欧美| 国产视色精品亚洲一区二区| 综合一区av| 一区二区三区 欧美| 91麻豆swag| 欧美亚洲天堂网| 日韩欧美精品在线视频| 日本激情视频在线观看| 国产精品第七十二页| 秋霞影院一区二区三区| 日韩黄色片在线| 国产曰批免费观看久久久| 少妇愉情理伦三级| 色av一区二区| 你懂的在线观看| 情事1991在线| 日韩精品导航| 国产96在线 | 亚洲| 国产69精品久久777的优势| 欧日韩不卡视频| 欧美日韩国产一区二区三区地区| 你懂的视频在线| 日韩美女av在线免费观看| 思热99re视热频这里只精品| 黄色成人在线看| 成人aaaa免费全部观看| 国产亚洲小视频| 欧美va在线播放| 欧美女同一区| 国产精品国产精品| 亚洲黄色天堂| 国产精品麻豆入口| 五月婷婷久久综合| 五十路在线观看| 欧美中文在线视频| 国产一区二区三区探花| 在线观看的毛片| 国产精品乱码人人做人人爱| 一区二区小视频| 精品国产一区二区三区久久久| 9999在线精品视频| 欧美另类videos| 成人午夜电影久久影院| 国产午夜性春猛交ⅹxxx| 精品亚洲aⅴ在线观看| 午夜精品成人av| 亚洲综合av一区| 激情成人午夜视频| 免费看一级一片| 亚洲国产精品va在看黑人| 一区二区电影免费观看| 日韩福利视频| 国内欧美视频一区二区| 久草免费新视频| 精品伊人久久97| 国产一区二区精品调教| 亚洲成年人专区| 波多野结衣91| 波多野结衣一本一道| www.欧美三级电影.com| 影音先锋欧美激情| 亚洲精品乱码久久久久久自慰| 中文字幕av一区 二区| 99久久精品国产一区色| 91精品国产91久久久久福利| 欧美精品乱码| 在线观看视频在线观看| 欧美午夜宅男影院在线观看| 婷婷成人激情| 国产日韩一区二区| 日本伊人色综合网| 青娱乐国产精品| 精品视频在线观看日韩| 亚洲一区av| 亚欧无线一线二线三线区别| 中文一区一区三区高中清不卡| 亚洲精品免费在线观看视频| 日本道色综合久久影院| 91精品国产91久久综合 | 中文字幕va一区二区三区| av网站免费大全| 国产高清在线不卡| 亚洲二区在线| 欧美美女性生活视频| 亚洲白拍色综合图区| 人人精品久久| 亚洲国产精品久久久久婷蜜芽| 亚洲美女淫视频| 高清性色生活片在线观看| 福利视频久久| 久久精品久久精品| 一级片在线观看免费|