身份証產生器

      在〈身份証產生器〉中尚無留言

驗証碼計算方式

將字母轉換成二位數然後 sum= 十位數+個位數*9

後面 7 碼分別乘上 8,7,6,….1, 相加後再與sum相加

驗証碼即為 10-(sum%10), 但若結果為10, 則驗証碥為0

出生縣市

英文代號

檢驗數字

台北市

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

30

澎湖縣

X

31

出生縣市

英文代號

檢驗數字

陽明山

Y

32

連江縣

Z

33

 
身份証驗証碼
   A    1  2  3  4  5  6  7  8    9
  10    8  7  6  5  4  3  2  1    
 1+0*9  8  14 18 20 20 18 14 8 = 121
 121 % 10 =1
 10-1 = 9

完整代碼如下

using System;
using System.Windows;

namespace TaiwanId
{
    public partial class MainWindow : Window
    {
        string[] city = {
            "臺北市","臺中市","基隆市","臺南市","高雄市","臺北縣","宜蘭縣",
            "桃園縣","嘉義市","新竹縣","苗栗縣","臺中縣","南投縣","彰化縣",
            "新竹市","雲林縣","嘉義縣","臺南縣","高雄縣","屏東縣","花蓮縣",
            "臺東縣","金門縣","澎湖縣","陽明山","連江縣" };
        int[] code = {
            10,11,12,13,14,15,16,
            17,34,18,19,20,21,22,
            35,23,24,25,26,27,28,
            29,30,31,32,33};
        string[] alias = {
            "A","B","C","D","E","F","G",
            "H","I","J","K","L","M","N",
            "O","P","Q","R","S","T","U",
            "V","W","X","Y","Z"};
 
        public MainWindow()
        {
            InitializeComponent();
            foreach(string s in city)
            {
                cmbCity.Items.Add(s);
            }
            cmbSex.Items.Add("男");
            cmbSex.Items.Add("女");
            cmbCity.SelectedIndex = 0;
            cmbSex.SelectedIndex = 0;
        }

        private void btnNew_Click(object sender, RoutedEventArgs e)
        {
            Random r = new Random();
            string id = "";
            id += alias[cmbCity.SelectedIndex];
            if (cmbSex.SelectedIndex == 0) id += "1";
            else id += "2";
            for (int i = 0; i < 7; i++)
            {
                id += r.Next(0, 10);
            }
            //txtId.Text = id;
            txtId.Text = id + checksum(id);
        }

        private void btnCheck_Click(object sender, RoutedEventArgs e)
        {
            lblChecksum.Content=checksum(txtId2.Text).ToString();
        }
        private int checksum(string id)
        {
            int sum = 0;
            if (id.Length != 9)
            {
                MessageBox.Show("長度必需為 9 位數");
                return -1;
            }
            char t = id.Substring(0, 1).ToUpper().ToCharArray()[0];
            if (t < 65 || t > 90)
            {
                MessageBox.Show("第一碼必需為英文字母");
                return -1;
            }
            //英文字母轉成2位數字後, 十位數加上個位數*9
            int c = code[t - 65];
            sum = c / 10 + (c % 10) * 9;
            for (int i = 1; i <= 8; i++)
            {
                int x = Int32.Parse(id.Substring(i, 1));
                sum += x * (9 - i);
            }
            return (10 - sum % 10) % 10;
        }
    }
}

xaml 檔如下

<Window x:Class="TaiwanId.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 xmlns:local="clr-namespace:TaiwanId"
 mc:Ignorable="d"
 Title="MainWindow" Height="450" Width="860">
 <Grid>
 <Grid.Background>
 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 <GradientStop Color="#FF8DFFFA" Offset="0"/>
 <GradientStop Color="#FFEBABEE" Offset="1"/>
 </LinearGradientBrush>
 </Grid.Background>
 <StackPanel Orientation="Vertical">
 <StackPanel Orientation="Vertical">
 <StackPanel.Background>
 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 <GradientStop Color="#FFF6FF3E" Offset="0"/>
 <GradientStop Color="#FF37C6FB" Offset="1"/>
 </LinearGradientBrush>
 </StackPanel.Background>
 <Label Content="台灣身份証字號產生器" HorizontalAlignment="Center" FontSize="24"/>
 </StackPanel>
 <StackPanel Orientation="Horizontal" Margin="0,20,0,0">
 <Label Content="縣市" FontSize="24" VerticalContentAlignment="Center"/>
 <ComboBox x:Name="cmbCity" Width="100" FontSize="24" VerticalContentAlignment="Center"/>
 <Label Content="性別 " Margin="20,0,0,0" FontSize="24" VerticalContentAlignment="Center"/>
 <ComboBox x:Name="cmbSex" Width="100" FontSize="24" VerticalContentAlignment="Center"/>
 <Button Content="產生" x:Name="btnNew" Click="btnNew_Click" Margin="20,0,0,0" FontSize="24" Width="100"/>
 <Label Content="新身份証字號" FontSize="24" Margin="20,0,0,0" VerticalContentAlignment="Center"/>
 <TextBox x:Name="txtId" Width="200" Height="50" Background="#FF9CF120" FontSize="24" 
 IsReadOnly="True" VerticalContentAlignment="Center" /> 
 </StackPanel>
 <StackPanel Orientation="Horizontal" Margin="0,20,0,0">
 <StackPanel.Background>
 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 <GradientStop Color="#FF14E7F1" Offset="0"/>
 <GradientStop Color="#FFB5B8F9" Offset="1"/>
 </LinearGradientBrush>
 </StackPanel.Background>
 
 <Label Content="身份証前九碼" FontSize="24" VerticalContentAlignment="Center"/>
 <TextBox x:Name="txtId2" Width="200" FontSize="24" VerticalContentAlignment="Center"/>
 <Label x:Name="lblChecksum" Width="50" FontSize="24" Background="#FFD1D1D1" VerticalContentAlignment="Center"/>
 <Button x:Name="btnCheck" Content="檢碼" Height="50" Width="100" FontSize="24" Margin="20,0,0,0" Click="btnCheck_Click" VerticalContentAlignment="Center"/>
 </StackPanel>
 </StackPanel>
 </Grid>
</Window>

id

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *