最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

如何手算一張二維碼

2018-07-06 09:38 作者:高玩梁  | 我要投稿

二維碼是由Denso Wave Incorporated創(chuàng)建的特殊類型的條形碼。二維碼格式在1994年由日本公司Denso-Wave創(chuàng)建,該公司是豐田的子公司,生產(chǎn)汽車零部件(我一個(gè)生產(chǎn)汽車零部件的,怎么就創(chuàng)造了二維碼呢)。該標(biāo)準(zhǔn)定義在ISO / IEC 18004:2015中(有2016,但是這樣的標(biāo)準(zhǔn)太貴了)。二維碼使用易于被光學(xué)掃描儀讀取的像素圖案來(lái)編碼文本和數(shù)字。本教程教授大家如何在二維碼中編碼信息。建議有一定計(jì)算機(jī)基礎(chǔ)的人閱讀。(沒(méi)有也行,只要會(huì)數(shù)學(xué)就行)

如果你僅僅想創(chuàng)建二維碼,則不需要閱讀本教程。使用這個(gè)網(wǎng)站https://cli.im/即可創(chuàng)建二維碼。

注意事項(xiàng):

當(dāng)你看不懂的時(shí)候想想這個(gè)


正片開(kāi)始

1.確定你要編碼的東西

二維碼有4種編碼形式數(shù)字,字符,字節(jié)和日文(豐田出的標(biāo)準(zhǔn),當(dāng)然是有日文了)。每種編碼模式將文本編碼為一串二進(jìn)制數(shù)字(1和0),但每個(gè)模式使用不同的方法將文本轉(zhuǎn)換為二進(jìn)制數(shù)字,并且每個(gè)編碼模式使用盡可能最短的一串二進(jìn)制數(shù)字來(lái)編碼數(shù)據(jù)。因此,第一步應(yīng)該是進(jìn)行數(shù)據(jù)分析,以確定該文本是否可以符合數(shù)字,字母,字節(jié)或日文模式的編碼,然后選擇最優(yōu)化的編碼模式。

本文用BILIBILI CHEERS以例子,所以我們采用字符編碼


選擇錯(cuò)誤校正級(jí)別

在編碼數(shù)據(jù)之前,首先應(yīng)當(dāng)選擇錯(cuò)誤校正級(jí)別。二維碼使用里德-所羅門碼(不求甚解)。該過(guò)程基于編碼數(shù)據(jù)創(chuàng)建糾錯(cuò)碼,二維碼閱讀器可以使用這些糾錯(cuò)碼來(lái)確定它是否正確地讀取數(shù)據(jù),并且可以使用糾錯(cuò)碼來(lái)糾正錯(cuò)誤。

二維碼中有四種級(jí)別的糾錯(cuò):L,M,Q,H。

下表列出了級(jí)別及其糾錯(cuò)能力:

注意: 更高級(jí)別的糾錯(cuò)需要更多的字節(jié),因此糾錯(cuò)級(jí)別越高,二維碼尺寸就越大。

確定最小的版本

二維碼一共有40個(gè)尺寸。官方叫版本Version。Version 1是21 x 21的矩陣,Version 2是 25 x 25的矩陣,Version 3是29 x 29 的尺寸,每增加一個(gè)Version,就會(huì)增加4的尺寸。

計(jì)算公式是:(V-1)*4 + 21(V是版本號(hào),算出來(lái)的結(jié)果是邊長(zhǎng))。

計(jì)算要編碼的字符數(shù),并確定對(duì)應(yīng)編碼模式的包含的字符數(shù)量和符合糾錯(cuò)級(jí)別的最小版本。

字符串 BILIBILI CHEERS 有15個(gè)字符。 假設(shè)糾錯(cuò)級(jí)別為H。查看字符容量表,發(fā)現(xiàn)版本1下糾錯(cuò)級(jí)別H在字符模式下只能包含10個(gè)字符。因此,在這種情況下可以使用的最小版本是版本2。

字符容量表

所以我們使用1-Q進(jìn)行編碼BILIBILI CHEERS


增加模式指示符

每個(gè)編碼模式都具有指示它的四位模式指示符。編碼數(shù)據(jù)必須以適當(dāng)?shù)哪J街甘痉_(kāi)始,用于指示后面的位串的模式。

用字符模式編碼應(yīng)該是0010


增加字符計(jì)數(shù)指示符

字符計(jì)數(shù)指示符是一串二進(jìn)制數(shù)字,表示正在編碼的字符數(shù)。字符計(jì)數(shù)指示符必須放在模式指示符之后。此外,字符計(jì)數(shù)指示符有特定的位長(zhǎng),具體取決于二維碼的版本和編碼模式。

具體步驟是:

計(jì)算原始輸入文本的字符數(shù),將其轉(zhuǎn)為二進(jìn)制數(shù)字。根據(jù)版本和編碼模式找到對(duì)應(yīng)的位長(zhǎng),不夠位長(zhǎng)的在前面加0補(bǔ)齊。

編碼BILIBILI CHEERS,版本號(hào)為1,則字符計(jì)數(shù)指示符必須為9位長(zhǎng)。

BILIBILI CHEERS的字符數(shù)為15。在二進(jìn)制中,15為1111

在左側(cè)填充0,使其長(zhǎng)度達(dá)到9位:000001111

將這個(gè)指示符放在模式指示符之后,獲得以下位串:0010 000001111

每種版本的對(duì)應(yīng)的字符計(jì)數(shù)指示符位長(zhǎng)


確定此二維碼所需的位數(shù)

要確定特定QR碼需要多少數(shù)據(jù)位,請(qǐng)參閱糾錯(cuò)表。

找到當(dāng)前文本生成二維碼所使用的版本和錯(cuò)誤糾正級(jí)別,并在標(biāo)有“數(shù)據(jù)碼字總數(shù)”的對(duì)應(yīng)列中找到該編號(hào)。將此數(shù)乘以8以獲得此版本和糾錯(cuò)級(jí)別所需的數(shù)據(jù)位的總數(shù)。

例如,根據(jù)該表,二維碼 1-Q 具有13個(gè)總數(shù)據(jù)碼字(一個(gè)數(shù)據(jù)碼字代表8位二進(jìn)制數(shù)字)。因此,該QR碼所需的總比特?cái)?shù)為13×8 = 104比特。

糾錯(cuò)碼和塊信息

分組

字符編碼模式將字符每?jī)蓚€(gè)分一組,如果分不了就單獨(dú)一組。

分組后:

(BI), (LI), (BI),(LI),( C), (HE),(ER),(S)

轉(zhuǎn)為二進(jìn)制

根據(jù)字母索引表找到對(duì)應(yīng)的數(shù)字:

字母索引表(其中的SP是空格,Char是字符,Value是其索引值)


然后對(duì)于每組數(shù)字,將第一個(gè)數(shù)字乘以45加上第二個(gè)數(shù)字,得到數(shù)字結(jié)果,然后轉(zhuǎn)成11bits的二進(jìn)制,如果最后有一個(gè)落單的,那就轉(zhuǎn)成6bits的二進(jìn)制。

舉個(gè)栗子:

BILIBILI CHEERS 的第一組字符是(BI)。

B → 11

I  → 18

result = (11 * 45) + 18 = 513

轉(zhuǎn)為二進(jìn)制(位長(zhǎng)不足補(bǔ)0):

513 → 01000000001

結(jié)果

BILIBILI CHEERS → 01000000001 01111000011 01000000001 01111000011 1100110000 01100001011 001010010001 011100

增加指示符

加上模式和字符計(jì)數(shù)指示符,最終結(jié)果為:

0010 000001111 01000000001 01111000011 01000000001 01111000011 1100110000 01100001011 001010010001 011100


添加終止符(如有需要)

如果位串小于所需位的總數(shù),則必須在字符串的右側(cè)添加最多四個(gè)0的終止符。

如果所需位數(shù)比位串大四位及以上,則將四個(gè)0加到結(jié)尾。否則只添加達(dá)到所需位數(shù)所需的0的個(gè)數(shù)。

例如,如果在 1-Q 的二維碼中編碼BILIBILI CHEERS,則所需比特的總數(shù)是104比特。BILIBILI CHEERS數(shù)據(jù)位字符串為96位長(zhǎng)。終止符的長(zhǎng)度最多只能為4位,因此在字符串的右側(cè)添加4個(gè)0。結(jié)果字符串仍然太短,無(wú)法填充104位容量,但二維碼規(guī)范要求終止符的長(zhǎng)度最多為4個(gè)0。如果字符串已經(jīng)是102位,則終止符的長(zhǎng)度將僅為2位。


添加了終止符的BILIBILI CHEERS字符串示例


添加更多0,使長(zhǎng)度為8的倍數(shù)

添加終止符后,如果字符串中的位數(shù)不是8的倍數(shù),首先使用0來(lái)填充右側(cè)的字符串,使字符串的長(zhǎng)度為8的倍數(shù)。

例如,在將終止符添加到BILIBILI CHEERS之后,長(zhǎng)度變?yōu)?00位長(zhǎng)。這不是8的倍數(shù)。位串顯示為8位二進(jìn)制字節(jié):

00100000 00111101 00000000 10111100 00110100 00000010 11110000 11110011 00000110 00010110 01010010 00101110 0000

添加4個(gè)0使其成為8位二進(jìn)制字節(jié):

00100000 00111101 00000000 10111100 00110100 00000010 11110000 11110011 00000110 00010110 01010010 00101110 00000000

如果字符串仍然太短,則添加補(bǔ)齊碼

如果字符串仍然不足以填充最大容量,請(qǐng)將以下字節(jié)添加到字符串的末尾,不斷重復(fù),直到字符串已達(dá)到最大長(zhǎng)度:

11101100 00010001

這些字節(jié)分別等于236和17,二維碼針對(duì)在字符串太短的情況特別規(guī)定了補(bǔ)齊碼。

第一部分告一段落,然后,準(zhǔn)備好覺(jué)悟吧


當(dāng)你看不懂的時(shí)候想想這個(gè)


2.生成糾錯(cuò)碼

多項(xiàng)式長(zhǎng)除法

糾錯(cuò)碼字將使用稱為Reed-Solomon糾錯(cuò)的方法來(lái)生成,部分過(guò)程是執(zhí)行多項(xiàng)式長(zhǎng)除法。也就是說(shuō),用一個(gè)多項(xiàng)式除以另一個(gè)多項(xiàng)式。(本教程用不到,所以這里就不再贅述)

伽羅瓦域

如上所述,為了生成糾錯(cuò)碼字,該過(guò)程使用稱為Reed-Solomon糾錯(cuò)的方法。
而多項(xiàng)式長(zhǎng)除法則用到了伽羅瓦域,其本質(zhì)上是數(shù)字的有限集合,以及創(chuàng)建仍在該集合中的數(shù)字的一些數(shù)學(xué)運(yùn)算。

二維碼標(biāo)準(zhǔn)使用逐位模2算法和逐字節(jié)模100011101算法。這意味著使用伽羅瓦域28,換句話說(shuō)是伽羅瓦域256,有時(shí)也寫為GF(256)。

GF(256) 中的數(shù)字在0到255(包括)的范圍內(nèi)。也可以用八位字節(jié)表示的相同數(shù)字范圍(最大可能的八位字節(jié)是11111111,等于255)。

這意味著GF(256)中的所有數(shù)學(xué)運(yùn)算將可以表示為八位字節(jié)的數(shù)字的運(yùn)算。

(本篇將使用一種更簡(jiǎn)單的方法)

公式太多,就直接word截圖了
對(duì)數(shù)與反對(duì)數(shù)表

生成糾錯(cuò)碼

現(xiàn)在終于可以開(kāi)始生成糾錯(cuò)碼字了。

這些碼字將被用作消息多項(xiàng)式的系數(shù)。此示例使用糾錯(cuò)級(jí)別Q和版本1創(chuàng)建1-Q代碼。

消息多項(xiàng)式

BILIBILI CHEERS的數(shù)據(jù)碼如下:

00100000 00111101 00000000 10111100 00110100 00000010 11110000 11110011 00000110 00010110 01010010 00101110 00000000

將二進(jìn)制轉(zhuǎn)為十進(jìn)制:

32 61 0 188 52 2 240 243 6 22 82 46 0

這些十進(jìn)制數(shù)字是消息多項(xiàng)式的系數(shù)。

32x^12+61x^11+188x^9+........+46x+0

 生成多項(xiàng)式

由于這是1-Q碼,查找糾錯(cuò)表,可知需要生成13個(gè)糾錯(cuò)碼字。因此,使用以下生成多項(xiàng)式:

附錄A給出了

除法步驟

現(xiàn)在需要用生成多項(xiàng)式除消息多項(xiàng)式,具體步驟和前面介紹的大致相同。

下面是包含伽羅瓦域算法的除法步驟:

  1. 找到適當(dāng)?shù)捻?xiàng)乘以生成多項(xiàng)式,乘法的結(jié)果應(yīng)該具有與消息多項(xiàng)式(在首次乘法步驟中)或余數(shù)(在所有后續(xù)乘法步驟中)相同的第一項(xiàng);

  2. 將結(jié)果與消息多項(xiàng)式(在首次乘法步驟中)或余數(shù)(在所有后續(xù)乘法步驟中)進(jìn)行異或運(yùn)算。

  3. 重復(fù)執(zhí)行以上步驟n次,其中n是數(shù)據(jù)碼字的數(shù)量。

注意這些步驟和正常多項(xiàng)式長(zhǎng)除法的步驟之間的差異。在乘法步驟之后進(jìn)行減法的運(yùn)算,我們用異或代替。

在劃分兩個(gè)多項(xiàng)式之后,將會(huì)有一個(gè)余數(shù),該余數(shù)的系數(shù)就是糾錯(cuò)碼字。

符號(hào)太多,不如手寫快

多項(xiàng)式系數(shù)作為糾錯(cuò)碼

除法已執(zhí)行完13次,即消息多項(xiàng)式中項(xiàng)的數(shù)量。上述多項(xiàng)式的系數(shù)即是用于原始消息多項(xiàng)式的糾錯(cuò)碼字:

58 253 16 114 183 245 176 209 91 64 141 165 77


對(duì)于較小版本,直接使用數(shù)據(jù)和糾錯(cuò)碼

請(qǐng)注意,較小版本的二維碼僅包括一個(gè)數(shù)據(jù)碼字塊,具有用于該塊的一組糾錯(cuò)碼字。在這種情況下,不需要交替排列。只需將糾錯(cuò)碼字放置在數(shù)據(jù)碼字之后,即可進(jìn)入下一步,將模塊放置在矩陣中。

3.如何放置功能模式和數(shù)據(jù)位

術(shù)語(yǔ):像素與模塊

在本文中,我將二維碼的黑白方塊稱為模塊而不是像素。這是為了區(qū)分屏幕上的像素和二維碼的黑色和白色方塊。
例如,版本1的二維碼總是2121個(gè)模塊,即使它在計(jì)算機(jī)屏幕上占用4242像素,或105x105等等。

功能模式概述

二維碼必須包括功能模式。這些是必須放置在二維碼的特定區(qū)域中的圖案,以確保二維碼掃描器可以正確地識(shí)別和定向用于解碼的代碼。

下圖給出了功能模式是什么以及它們位于何處的示例。


finder patterns 是二維碼左上角,右上角和左下角的角落中的三個(gè)塊。

separators 是finder patterns旁邊的空白區(qū)域。

alignment patterns類似于finder patterns,但是更小,并且被放置在整個(gè)代碼中。它們?cè)诎姹?和更大版本中使用,它們的位置取決于二維碼版本。本文用不到

timing patterns是連接finder patterns的虛線。

dark module是一個(gè)單一的黑色模塊,總是放置在左下角的finder patterns旁邊。

添加 Finder Patterns

首先,將finder patterns放入矩陣。

finder patterns(如下所示)外部由一個(gè)黑色正方形組成,為77個(gè)模塊,內(nèi)部為一個(gè)白色正方形為55個(gè)模塊,中間有一個(gè)實(shí)心黑色正方形,3*3個(gè)模塊。

finder patterns

finder patterns被設(shè)計(jì)為不可能出現(xiàn)在二維碼的其他部分內(nèi)的圖案。Finder Patterns的模塊寬度具有1:1:3:1:1的比率。二維碼掃描器可以搜索亮到暗模塊的這個(gè)比率以檢測(cè)finder patterns并且正確地定位二維碼用于解碼。

無(wú)論使用哪個(gè)版本,finder patterns始終放置在二維碼的左上角,右上角和左下角。

添加 Separators

Separators 是白色模塊線,一個(gè)模塊寬,放置在finder patterns旁邊,以將它們與二維碼的其余部分分離。

finder patterns外面一圈就是Separators

添加 Timing Patterns

Timing Patterns是暗模塊和亮模塊交替的兩條線,一條水平線和一條垂直線。Timing Patterns放置在Separators之間的二維碼的第6行上。

Alignment Patterns可以與Timing Patterns重疊,因?yàn)樗鼈兊牧梁桶的K總是與Timing Patterns的亮和暗模塊重合。下圖顯示不同版本的二維碼的Timing Patterns。

暗模塊

如上所述,所有二維碼在左下角 Finder Patterns 旁邊有一個(gè)黑暗的模塊。
更具體地說(shuō),暗模塊總是位于坐標(biāo)([(4 * V)+ 9],8),其中V是二維碼的版本。

保留格式信息區(qū)

必須為格式信息區(qū)域保留Separators旁邊的模塊條,如下所示:

  • 在左上方Finder Patterns附近,必須在Separators的下方和右側(cè)保留單模塊條帶。

  • 在右上方Finder Patterns附近,必須在Separators下方保留單模塊條帶。

  • 在左下方Finder Patterns附近,必須在Separators的右側(cè)保留單模塊條帶。

放置方法

數(shù)據(jù)位從矩陣的右下方開(kāi)始放置,并且在2個(gè)模塊寬的列中向上前進(jìn)。當(dāng)列到達(dá)頂部時(shí),下一列在上一列的左側(cè),并繼續(xù)向下。每當(dāng)當(dāng)前列到達(dá)矩陣的邊緣時(shí),移動(dòng)到下一列并改變方向。如果遇到功能模式或保留區(qū),則數(shù)據(jù)位將放置在下一個(gè)未使用的模塊中。

向上放置

下圖顯示了當(dāng)列向上移動(dòng)時(shí)放置數(shù)據(jù)位的順序。

以下示例說(shuō)明了數(shù)據(jù)碼在首列中向上移動(dòng)的過(guò)程。

向下放置

下圖顯示了當(dāng)列向下移動(dòng)時(shí)放置數(shù)據(jù)位的順序。

以下示例說(shuō)明了數(shù)據(jù)碼向下移動(dòng)的過(guò)程。

跳過(guò)功能模式

當(dāng)遇到功能模式時(shí),跳過(guò)已被占用的模塊,直到到達(dá)下一個(gè)未使用的模塊。

掩碼

如果一個(gè)模塊被掩碼覆蓋,則亮模塊變暗,暗模塊變亮。換句話說(shuō),就是改變模塊的顏色。

掩碼圖案

二維碼標(biāo)準(zhǔn)定義了八個(gè)可應(yīng)用于二維碼的掩碼圖案。

例如,掩碼圖案#1對(duì)二維矩陣中的每?jī)尚羞M(jìn)行掩碼,對(duì)于掩碼圖案#2,對(duì)二維矩陣中的每三列進(jìn)行掩碼。

八種掩碼圖案

當(dāng)編碼二維碼時(shí),有八個(gè)掩碼圖案,你可以使用它們來(lái)更改輸出的矩陣。每個(gè)掩碼圖案根據(jù)它們?cè)诙S矩陣中的坐標(biāo)改變位(顏色)。掩碼圖案的目的是修改二維碼圖案以使二維碼掃描器更容易讀取。

每個(gè)掩碼模式使用公式來(lái)確定是否改變當(dāng)前位的顏色。將當(dāng)前位的坐標(biāo)放入公式中,如果結(jié)果為0,則使用該坐標(biāo)處的相反位。例如,如果坐標(biāo)(1,3)的位為1,并且將該坐標(biāo)放入公式得到0,則將0置于(1,3)。這里是掩碼模式公式的列表。

與表格對(duì)照時(shí),請(qǐng)將前面標(biāo)號(hào)換算為十進(jìn)制

掩碼模式只應(yīng)用于數(shù)據(jù)模塊糾錯(cuò)模塊。即下面模塊不需要使用掩碼:

  • 功能模式

    • finder patterns

    • timing patterns

    • separators

    • alignment patterns(本文用不到)

  • 格式信息區(qū)域

  • 版本信息區(qū)域

確定最佳掩碼

在將掩碼圖案應(yīng)用于二維碼矩陣時(shí),還需要根據(jù)二維碼標(biāo)準(zhǔn)中定義的四個(gè)評(píng)估條件給予評(píng)分。二維碼編碼器必須應(yīng)用所有的八個(gè)掩模圖案(就叫掩模),并且對(duì)每一個(gè)圖案進(jìn)行評(píng)估。

無(wú)論是哪種掩模模式,最終分?jǐn)?shù)最低的就是用于最終輸出的掩碼模式。(我們手工畫,不需要計(jì)算,隨便挑一種就行,這里就不詳細(xì)敘述如何計(jì)算,8種模式最后都能掃出來(lái))

我將選擇0號(hào)掩碼

格式字符串

格式信息字符串對(duì)當(dāng)前二維碼中使用的錯(cuò)誤校正級(jí)別和掩碼模式進(jìn)行編碼。由于存在四個(gè)可能的糾錯(cuò)級(jí)別(L,M,Q和H)和7個(gè)可能的掩碼模式,因此存在 4×7 = 28 個(gè)可能的格式信息串。有關(guān)28個(gè)格式字符串的完整列表,請(qǐng)參閱格式字符串表。

生成格式信息字符串

格式信息字符串是一個(gè)15個(gè)bits的信息,每一個(gè)bit的位置如下圖所示:(注意圖中的Dark Module,那是永遠(yuǎn)出現(xiàn)的)

格式字符串表

將格式字符串放入二維碼

格式信息字符串放置在最上面的finder patterns的下方和最左側(cè)的finder patterns的右側(cè),如下圖所示。

圖像中的數(shù)字14指的是格式字符串的最高有效位,數(shù)字0指的是最低有效位。

例如,使用上面例子(用的0號(hào)掩碼,糾錯(cuò)級(jí)別位Q)中的格式字符串011010101011111,下面圖像中的數(shù)字對(duì)應(yīng)于格式字符串位如下:


好了,現(xiàn)在我們把數(shù)據(jù)準(zhǔn)備一下,開(kāi)始填充

數(shù)據(jù)碼:

00100000 00111101 00000000 10111100 00110100 00000010 11110000 11110011 00000110 00010110 01010010 00101110 00000000

糾錯(cuò)碼:

58 253 16 114 183 245 176 209 91 64 141 165 77

將其轉(zhuǎn)換為8位二進(jìn)制(每個(gè)都轉(zhuǎn)換成八位)

00111010 11111101 00010000 01110010 10110111 11110101 10110000 11010001 01011011 01000000 10001101 10100101 01001101

放在數(shù)據(jù)碼后面

00100000 00111101 00000000 10111100 00110100 00000010 11110000 11110011 00000110 00010110 01010010 00101110 00000000 00111010 11111101 00010000 01110010 10110111 11110101 10110000 11010001 01011011 01000000 10001101 10100101 01001101

按照上面的順序填充


填充完后效果如圖(但是這個(gè)不能掃描,必須經(jīng)過(guò)掩碼操作)

在excel里填充的

我選擇0號(hào)掩碼

000號(hào)掩碼

放入拷貝臺(tái),進(jìn)行異或運(yùn)算(記錄下兩張圖不一樣的塊)


因?yàn)樵诳截惻_(tái)上只能看出深色塊,所以教大家一個(gè)巧法,先把一張放在上面,記錄不一樣的黑塊,標(biāo)識(shí)出來(lái)(因?yàn)槿绻厦媸呛?,下面是白,看不出?lái),黑把白擋住了),然后再把另一張標(biāo)識(shí)出來(lái)

最后畫出來(lái),一樣就是白塊,不一樣就是黑塊,標(biāo)識(shí)出來(lái)的都是黑塊

最終成果

請(qǐng)注意:本二維碼無(wú)法長(zhǎng)按識(shí)別(網(wǎng)格線干擾)建議用另一臺(tái)手機(jī)掃描

修復(fù)內(nèi)容錯(cuò)誤后重新上傳

如何手算一張二維碼的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
武山县| 通化县| 清远市| 宁化县| 黔西| 乐安县| 尼勒克县| 宁德市| 遵义市| 同德县| 锡林浩特市| 奉贤区| 湘阴县| 莱芜市| 连江县| 湟中县| 长治市| 镇康县| 泸定县| 庆阳市| 南溪县| 乌鲁木齐市| 临沭县| 娱乐| 象州县| 金秀| 象山县| 普安县| 视频| 大悟县| 罗山县| 青冈县| 丹阳市| 岢岚县| 闽侯县| 余干县| 泰宁县| 丹巴县| 浦县| 喀什市| 三江|