分享一下以前出的一道數據姿安題目

題幹:兩岸數據傳輸洩露分析

某單位在進行兩岸數據傳輸時洩露了大量的臺灣省公民信息。請你根據給定的三個數據檔案進行分析,分別是:

  • 公民信息user.csv
  • 黑產網站清單evilwebsite.txt
  • 臺灣郵件網站訪問記錄history.json

一、數據文件說明

1. user.csv(臺灣公民信息,CSV 格式)

欄位順序:姓名, 住宅電話, 身份證, 年齡, 家庭住址, 郵政編碼, 性別

範例(CSV 行):

1
蔡一堅,033374123,K107802128,24,桃園縣桃園市桃二街,33063,男

2. evilwebsite.txt(黑產網站清單)

  • 每行一個黑產網站或黑產域名或 URL,例如:
1
2
3
4
5
6
7
www.badsite-example.com
https://malicious-portal.example/path
https://iloli.moe
http://sbnasiusiojasd.com
http://asdmbnaucasc.com
http://sadioasjoiqnwr.com
https://baidu.com

3. history.json(網站訪問記錄,JSON 格式)

每條記錄包含:id(uuid 唯一識別碼)、time(訪問時間)、cookieurl(網站 URL)、ip(訪問 IP)、userid(身份證或包含身份證的字串)

示例(注意:示例中的 userid 欄可能混雜年齡等其它內容,需從中抽取合法的身分證格式):

1
2
3
4
5
6
7
8
{
"id": "46996610-01ab-4ab6-8d91-64ce8f48cefd",
"time": "2024/11/11 11:11:11",
"cookie": "webcookie=cookie",
"url": "https://www.2173891eoiwho.com",
"ip": "231.12.22.1",
"userid": "K107802128,24"
}

二、臺灣身分證結構與規則說明

臺灣省身份證結構可分為三部分:地區編碼(首字母)數字編碼(後 9 碼)身份證驗證(最後一位數字)
下列為題幹提供的對應關係與驗證說明。

1. 首字母(地區字母)對應(示例)

  • A 臺北市 → 10
  • B 臺中市 → 11
  • C 基隆市 → 12
  • D 臺南市 → 13
  • E 高雄市 → 14
  • F 臺北縣 → 15
  • G 宜蘭縣 → 16
  • H 桃園縣 → 17
  • I 嘉義市 → 34
  • J 新竹縣 → 18
  • K 苗栗縣 → 19
  • L 臺中縣 → 20
  • M 南投縣 → 21
  • N 彰化縣 → 22
  • O 新竹市 → 35
  • P 雲林縣 → 23
  • Q 嘉義縣 → 24
  • R 臺南縣 → 25
  • S 高雄縣 → 26
  • T 屏東縣 → 27
  • U 花蓮縣 → 28
  • V 臺東縣 → 29
  • W 金門縣 → 32
  • X 澎湖縣 → 30
  • Y 陽明山管理局 → 31
  • Z 連江縣 → 33

注意:題幹同時提供了「縣市名稱與區域號碼」之對應(例如 03/033/034 表示桃園等數字區碼),可用於電話區號驗證


2. 數字編碼(含性別碼)

  • 身分證第二位(數字)代表性別:1 = 男,2 = 女
  • 身分證最後一位為驗證碼(需按下述公式計算檢驗)

3. 身份證驗證公式(檢查碼計算)

通算值計算方式:

1
2
3
4
5
6
7
8
9
10
11
通算值 = (首字母對應之第一位驗證碼)
+ (首字母對應之第二位驗證碼) * 9
+ 性別碼 * 8
+ 第2位數字 * 7
+ 第3位數字 * 6
+ 第4位數字 * 5
+ 第5位數字 * 4
+ 第6位數字 * 3
+ 第7位數字 * 2
+ 第8位數字 * 1
最終驗證碼 = 10 - (通算值 的末位數)

(此處以題幹所述公式為準,實作時需對 首字母 做數字拆分並帶入計算。)


4. 電話區號與縣市對應(題幹提供)

題幹提供的主要區域號碼對應,例如:

  • 02 → 臺北
  • 03 / 033 / 034 → 桃園
  • 035 / 036 → 新竹
  • 038 → 花蓮
  • 039 → 宜蘭
  • 037 → 苗栗
  • 042 / 043 / 045 / 046 → 臺中
  • 047 / 048 → 彰化
  • 049 → 南投
  • 052 / 053 → 嘉義
  • 055 / 056 / 057 → 雲林
  • 062 / 065 / 066 / 067 → 臺南
  • 069 → 澎湖
  • 07 → 高雄
  • 087 / 088 → 屏東
  • 089 → 臺東
  • 082 / 0823 → 金門
  • 0826 → 烏坵
  • 0836 → 馬祖

在驗證住宅電話時,需抽取號碼開頭的區碼(題幹示例 033374123 可視為 03x 類型屬於桃園對應範圍),並與家庭住址所示縣市進行匹配。


三、驗證規則(需同時滿足三項)

user.csv 每一條記錄,驗證下列三條規則:

規則一(地區對應)

  • 家庭住址必須符合身分證的地區(首字母對應之縣市)。
    例:身分證 D160549675 對應為「臺南市」,則 家庭住址 必須為臺南市。

規則二(性別對應)

  • 性別 欄位必須與身分證內的性別碼一致(身分證第二位 1/2男/女)。

規則三(電話區碼對應)

  • 住宅電話的區號必須符合家庭住址所屬縣市(例如電話以 03033 開頭表示桃園,則家庭住址必須也位於桃園)。

四、任務(輸出要求)

  1. 編寫腳本(或手動計算)驗證 user.csv 中有多少條公民同時滿足上述三條規則(即符合規則一、二、三的條目數)。
  2. 使用 history.jsonevilwebsite.txt,找出訪問黑產網站次數最多的臺灣公民的身份證(以 userid 欄位中抽取的合法身分證字串為準)。
    • userid 欄位含有其他字串(例如年齡),請從中抽取形如 [A-Z][0-9]{9} 的合法身分證格式來統計。
    • 若有多位並列最多,請列出任一位或全部(視題目評分需求而定)。

五、附加說明與範例

正確範例(題幹提供):

1
蔡一堅,033374123,K107802128,24,桃園縣桃園市桃二街,33063,男
  • 身分證 K107802128:首字母 K → 對應地區(題幹為「苗栗縣」對應 19,實際判定時請依題幹的字母→地區表比對),數字第二位 1 → 男;電話 033374123 的區碼屬於桃園(03x 類),家庭住址包含「桃園縣」——若字母與住址一致、性別一致且電話區碼與住址一致,則該條視為符合三規則。

錯誤範例(題幹提供):

1
陳火焰,0795568398,C292399182,34,臺中縣嘉義市嘉義街,33063,男
  • 錯誤理由:該身分證首字母 C 對應為基隆市,但 家庭住址 為臺中縣/嘉義市(不一致);身分證第二位為 2(女性)但 性別 欄為男;電話區碼 07 為高雄,與家庭住址不符;等等。

六、輸出範例格式(提交格式)

最終提交格式範例(請按題目要求填寫):

1
{661322_X264772748}

思路声明

目前我公開了本題的出題思路,如果您想要引用這道題目,可以直接拿過去,但前提是需要保留作者版權,:D