Hive進行身份證合法性校驗
身份證18位分別代表的含義,從左到右方分別表示:
- 1-2 省級行政區程式碼。
- 3-4 地級行政區劃分程式碼。
- 5-6 縣區行政區分程式碼。
- 7-10 11-12 13-14 出生年、月、日。
- 15-17 順序碼,同一地區同年、同月、同日出生人的編號,奇數是男性,偶數是女性。
- 18 校驗碼,如果是0-9則用0-9表示,如果是10則用X(羅馬數字10)表示。
身份證校驗碼的計算方法:
- 將前面的身份證號碼17位數分別乘以不同的係數。從第一位到第十七位的係數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
- 將這17位數字和係數相乘的結果相加。
- 用加出來和除以11,看餘數是多少。
- 餘數只可能有0-1-2-3-4-5-6-7-8-9-10這11個數字。其分別對應的最後一位身份證的號碼為1-0-X -9-8-7-6-5-4-3-2。
這條查詢語句雖然有些複雜,但條理還是比較清楚的。子查詢將字串轉為大寫,並去掉左右兩邊的空格,外層查詢的where條件篩選出四種不符合規則的身份證號碼。首先判斷號碼長度和省份程式碼,然後利用Hive的正則表示式匹配函式對整個號碼做逐位判斷,最後檢查校驗位是否正確。各種違規條件之間使用or邏輯運算子,前面的條件一旦滿足即可返回資料行,而不會再繼續判斷後面的條件。-- Hive 18位身份證號碼驗證 select * from (select trim(upper(idcard)) idcard from t) t1 where -- 號碼位數不正確 length(idcard) <> 18 -- 省份程式碼不正確 or substr(idcard,1,2) not in ('11','12','13','14','15','21','22','23','31', '32','33','34','35','36','37','41','42','43', '44','45','46','50','51','52','53','54','61', '62','63','64','65','71','81','82','91') -- 身份證號碼的正則表示式判斷 or (if(pmod(cast(substr(idcard, 7, 4) as int),400) = 0 or (pmod(cast(substr(idcard, 7, 4) as int),100) <> 0 and pmod(cast(substr(idcard, 7, 4) as int),4) = 0), -- 閏年 if(idcard regexp '^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9X]$',1,0), if(idcard regexp '^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9X]$',1,0))) = 0 -- 校驗位不正確 or substr('10X98765432',pmod( (cast(substr(idcard,1,1) as int)+cast(substr(idcard,11,1) as int))*7 +(cast(substr(idcard,2,1) as int)+cast(substr(idcard,12,1) as int))*9 +(cast(substr(idcard,3,1) as int)+cast(substr(idcard,13,1) as int))*10 +(cast(substr(idcard,4,1) as int)+cast(substr(idcard,14,1) as int))*5 +(cast(substr(idcard,5,1) as int)+cast(substr(idcard,15,1) as int))*8 +(cast(substr(idcard,6,1) as int)+cast(substr(idcard,16,1) as int))*4 +(cast(substr(idcard,7,1) as int)+cast(substr(idcard,17,1) as int))*2 +cast(substr(idcard, 8,1) as int)*1 +cast(substr(idcard, 9,1) as int)*6 +cast(substr(idcard,10,1) as int)*3,11)+1,1) <> cast(substr(idcard,18,1) as int);
相關推薦
Hive進行身份證合法性校驗
身份證號碼格式校驗是很多系統在資料整合時的一個常見需求,我們以18位身份證為例,使用一個Hive查詢實現身份證號碼的合法性驗證。該查詢結果是所有不合規的身份證號碼。按以下身份證號碼的定義規則建立查詢。 身份證18位分別代表的含義,從左到右方分別表示:1-2 省級行政區程
java身份證合法性校驗並獲取並根據身份證號提取身份證相關資訊
原文地址:https://blog.csdn.net/ycb1689/article/details/52352147 /** * 身份證前6位【ABCDEF】為行政區劃數字程式碼(簡稱數字碼)說明(參考《GB/T 2260-2007 中華人民共和國行政區劃程式碼》): *
java 程式碼實現身份證合法性校驗(全國所有地方)
很多地方可能都會用到對身份證要進行判斷校驗的功能,這個是之前在網上看到的,具體的網址都忘了,現在專案完成了,有時間把其整理下,方便自己和大家日後使用!(直接複製貼上即可) package org.asyware.insurance.util; import java.te
java身份證合法性校驗
直接上程式碼,裡面有測試類/** * 身份證前6位【ABCDEF】為行政區劃數字程式碼(簡稱數字碼)說明(參考《GB/T 2260-2007 中華人民共和國行政區劃程式碼》): * 該數字碼的編制原則和結構分析,它採用三層六位層次碼結構,按層次分別表示我國各省(自治區,
Jquery身份證號校驗以及根據身份證自動寫入出生年月
spa ron and digi tro 號碼 hang code birt 效果圖: 根據身份證號自動寫入出生年月 身份證號碼校驗: js代碼部分: 1 $(function() { 2 jQuery.validator.addMethod("isI
為List<T>中的T進行參數校驗
res ini obj ret name 請求 數據 參數綁定 $.ajax 1、現在前端發送了一個POST請求,他的Data是一個數組,而不是對象(jsonObj的值兩側是中括號)。 var jsonObj = [{‘id‘:11, ‘name‘:‘叵‘}, {‘id‘
java身份證號碼校驗、郵箱校驗、手機號碼/電話號碼校驗
i++ start exceptio span cas table mail pub sys import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.
Jmeter接口測試通過SQL查詢進行數據校驗
stp ima 分享 info turn return http catch object 在使用Jmeter做查詢類接口測試的時候,我們可以通過數據庫查詢結果與實際接口返回的結果進行數據校驗。 接口的返回值:{"PageResult":{"S
郵箱合法性校驗(中軟國際機試)
題目描述 輸入一個電子郵箱地址字串,要求檢查這個郵箱地址是否合法。如果輸入的電子郵箱地址是合法的,輸出字串1,否則輸出字串0。 滿足如下條件被認為是合法的郵箱地址: 1、僅包含一個'@'字元 2、最後三個字元必須是'.com' 3、字
身份證的校驗碼計算
PS:倒數第二位奇數為男,偶數為女 (1)十七位數字本體碼加權求和公式 S = Sum(Ai * Wi), i = 0, … , 16 ,先對前17位數字的權求和 Ai:表示第i位置上的身份證號碼數字值 Wi:表示第i位置上的加權因子&n
Java——使用springboot2.0+kaptcha進行驗證碼校驗
pom檔案 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/200
身份證號碼校驗 java校驗
最近在身份證認證的時候,需要對身份證號碼進行校驗。這裡進行記錄下 package com.ptpl.web.util; /** * 身份證前6位【ABCDEF】為行政區劃數字程式碼(簡稱數字碼)說明(參考《GB/T 2260-2007 中華人民共和國行政區劃程式碼》)
Java使用luhn校驗演算法實現銀行卡號合法性校驗&&獲取銀行卡號所屬銀行
Luhn校驗演算法或是Luhn 公式,也被稱作“模10演算法”。它是一種簡單的校驗公式,一般會被用於身份證號碼,IMEI號碼,美國供應商識別號碼, 或是加拿大的社會保險號碼的驗證。該演算法是由IBM的科學家Hans Peter Luhn所創造,於1954年1月6日提出該
Excel自定義函式_身份證號碼校驗
先上校驗規則 身份證號碼校驗規則一般應有: 位數校驗:是否18位 性別校驗:號碼所反映的性別與登記的文字性別是否一樣 日期校驗:①年份 出生年份比當前系統年份晚為錯,早於100也記為錯,應核實;②月份數值 應在01-12之間;③日期數值 1/3/5/7/8/10/12
Ajax結合SpringMVC進行使用者名稱非同步校驗
1. JSP程式碼: <script> function checkName(){ var name=document.getElementBy
身份證正確性校驗
驗證身份證的有效性,是否符合身份證規範 /** * 功能:身份證的有效驗證 * @param IDStr 身份證號 * @return 有效:返回"true" ;無效:返回String資訊 * @throws P
Java實現身份證演算法校驗
每一個身份證號碼,都不是胡亂隨機生成的,而是按照國家的規定,有規則的生成的,具體規則點選這裡檢視。我們校驗使用者的身份證輸入,僅靠簡單的位數判斷、正則校驗是達不到測試要求的,因此就需要根據國家的規定,把身份證的生成規則轉變為演算法,通過演算法來校驗使用者的輸入是
對前臺傳過來的實體是否為空 進行為空校驗的N種方法
common 編譯 response spl rst maps 校驗 mod 維護 首先定義一個註解,如下 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; im
超完整、全面的身份證號碼校驗
/** * identityCardVerify:身份證校驗 * param:cardId==身份證元素id */var identityCardVerify= function (cardId) { var vcity = { 11: "北京", 12:
vue-----使用eslint進行代碼校驗
fix filesize vue mic form -o 兩個 編輯 shu 參考 https://www.jianshu.com/p/dc799008bc68 現在很多程序員寫代碼的時候都喜歡開著eslint進行代碼格式校驗,寫習慣了還好,但是