マイナンバー（個人番号）の検査用数字の確認方法　（その2）

こちらの続きです。
[マイナンバー（個人番号）の検査用数字の確認方法](https://qiita.com/ekzemplaro/items/6e4e782c00d29fda15a9)

## プログラム Julia
> 次のプログラムは ChatGPT で変換しました。

```jl:check_digit.jl
# --------------------------------------------------------------------
#
#	check_digit.jl
#
#						Feb/23/2024
# --------------------------------------------------------------------
function check_digit_proc(xin)
    rvalue = false
    dd = 100000000000
    bb = [6,5,4,3,2,7,6,5,4,3,2]
    check_digit = xin % 10
    println("input = $xin")
    println("check_digit = $check_digit")
    pp = 0
    for it in 1:11
        a = div(xin, dd)
        pp += a * bb[it]
        xin = xin % dd
        dd = div(dd, 10)
    end
    qq = pp % 11
    ss = 11 - qq

    if 10 <= ss
        ss = 0
    end

    if check_digit == ss
        rvalue = true
    end

    return rvalue
end

# --------------------------------------------------------------------
println(stderr, "*** start ***")
xin = parse(Int, ARGS[1])

hantei = check_digit_proc(xin)

if hantei
    println(stderr, "*** 正しい ***")
else
    println(stderr, "*** 誤り ***")
end

println(stderr, "*** end ***")

# --------------------------------------------------------------------
```

実行結果

```text
$ julia check_digit.jl 983205673214
*** start ***
input = 983205673214
check_digit = 4
*** 正しい ***
*** end ***

$ julia check_digit.jl 983205673210
*** start ***
input = 983205673210
check_digit = 0
*** 誤り ***
*** end ***
```

確認したバージョン

```text
$ julia --version
julia version 1.10.1
```

## プログラム Rust
>次のプログラムは ChatGPT で変換しました。

```rs:check_digit.rs
// --------------------------------------------------------------------
/*
	check_digit.rs

						Feb/23/2024
*/
// --------------------------------------------------------------------
use std::env;

// --------------------------------------------------------------------
fn check_digit_proc(mut xin: i64) -> bool {
    let mut rvalue = false;
    let mut dd = 100000000000;
    let bb = vec![6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
    let check_digit = xin % 10;
    println!("input = {}", xin);
    println!("check_digit = {}", check_digit);
    let mut pp = 0;
    for it in 0..11 {
        let a = xin / dd;
        pp += a * bb[it];
        xin %= dd;
        dd /= 10;
    }
    let qq = pp % 11;
    let ss = 11 - qq;

    let ss = if 10 <= ss { 0 } else { ss };

    if check_digit == ss {
        rvalue = true;
    }

    rvalue
}

// --------------------------------------------------------------------
fn main() {
    let args: Vec<String> = env::args().collect();
    let xin: i64 = args[1].parse().expect("Failed to parse input");

    eprintln!("*** start ***");

    let hantei = check_digit_proc(xin);

    if hantei {
        eprintln!("*** 正しい ***");
    } else {
        eprintln!("*** 誤り ***");
    }

    eprintln!("*** end ***");
}

// --------------------------------------------------------------------
```

```text:Makefile
check_digit: check_digit.rs
	rustc check_digit.rs
clean:
	rm -f check_digit
 ```

 コンパイル

 ```text
 $ make
rustc check_digit.rs
```

実行結果

```text
$ ./check_digit 983205673214
*** start ***
input = 983205673214
check_digit = 4
*** 正しい ***
*** end ***

$ ./check_digit 983205673210
*** start ***
input = 983205673210
check_digit = 0
*** 誤り ***
*** end ***
```

確認したバージョン

```text
$ rustc --version
rustc 1.73.0 (cc66ad468 2023-10-03) (built from a source tarball)
```

## プログラム Kotlin
>次のプログラムは ChatGPT で変換しました。

```kotlin:check_digit.kt
// ------------------------------------------------------------------
/*
	check_digit.kt

					Feb/23/2024
*/
// ------------------------------------------------------------------
import kotlin.system.exitProcess

// ------------------------------------------------------------------
fun checkDigitProc(xin: Long): Boolean {
    var xinb: Long = xin
    var rvalue = false
    var dd = 100000000000
    val bb = listOf(6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2)
    val checkDigit = xin % 10
    println("input = $xin")
    println("check_digit = $checkDigit")
    var pp: Long = 0
    for (it in 0 until 11) {
        val a = xinb / dd
        pp += a * bb[it]
        xinb = xinb % dd
        dd = dd / 10
    }
    val qq = pp % 11
    var ss: Long = 11L - qq

    if (10 <= ss) {
        ss = 0
    }

    if (checkDigit == ss) {
        rvalue = true
    }
    return rvalue
}

// ------------------------------------------------------------------
fun main(args: Array<String>) {
    if (args.size != 1) {
        println("Usage: check_digit <number>")
        exitProcess(1)
    }

    System.err.println("*** start ***")
    val xin = args[0].toLong()

    val hantei = checkDigitProc(xin)

    if (hantei) {
        System.err.println("*** 正しい ***")
    } else {
        System.err.println("*** 誤り ***")
    }

    System.err.println("*** end ***")
}

// ------------------------------------------------------------------
```

```text:Makefile
check_digit.jar: check_digit.kt
	kotlinc check_digit.kt -include-runtime -d check_digit.jar
clean:
	rm -f check_digit.jar
```

コンパイル

```text
$ make
kotlinc check_digit.kt -include-runtime -d check_digit.jar
```

実行結果

```text
$ java -jar check_digit.jar 983205673214
*** start ***
input = 983205673214
check_digit = 4
*** 正しい ***
*** end ***

$ java -jar check_digit.jar 983205673210
*** start ***
input = 983205673210
check_digit = 0
*** 誤り ***
*** end ***
```

確認したバージョン

```text
$ kotlin -version
Kotlin version 1.9.21-release-633 (JRE 18.0.2-ea+9-Ubuntu-2ubuntu1)
```

## プログラム Java

```java:check_digit.java
// ----------------------------------------------------------------
/*

	check_digit.java

					Feb/28/2024
*/
// ----------------------------------------------------------------
public class check_digit
{
static boolean check_digit_proc(long xin)
{
	boolean rvalue = false;
	long dd = 100000000000L;
	int []bb = {6,5,4,3,2,7,6,5,4,3,2};
	long check_digit = xin % 10;
	System.out.printf("input = %d\n" , xin);
	System.out.printf("check_digit = %d\n" , check_digit);
	int pp = 0;
	int it;
	for (it=0; it < 11; it++)
		{
		int a = (int) (xin / dd);
		pp += a * bb[it];
		xin = (long) (xin % dd);
		dd = dd / 10;
		}

	int qq = pp % 11;
	int ss = 11 - qq;

	if (10 <= ss)
		{
		ss = 0;
		}

	System.out.printf("ss = %d\n" , ss);

	if (check_digit == ss)
		{
		rvalue = true;
		}

	return	rvalue;
}

// ----------------------------------------------------------------
public static void main (String[] args)
{
	System.err.println("*** start ***");
	long xin = Long.parseLong(args[0]);

	boolean hantei = check_digit_proc(xin);

	if (hantei)
		{
		System.err.println("*** 正しい ***");
		}
	else
		{
		System.err.println("*** 誤り ***");
		}
	
	System.err.println("*** end ***");
}
}
// ----------------------------------------------------------------
```

```text:Makefile
check_digit.class : check_digit.java
	javac -encoding UTF-8 check_digit.java
clean:
	rm -f *.class
 ```

 コンパイル

 ```text
 $ make
javac -encoding UTF-8 check_digit.java
```

実行結果

```text
$ java -Dfile.encoding=UTF-8 check_digit 983205673214
*** start ***
input = 983205673214
check_digit = 4
ss = 4
*** 正しい ***
*** end ***

$ java -Dfile.encoding=UTF-8 check_digit 983205673210
*** start ***
input = 983205673210
check_digit = 0
ss = 4
*** 誤り ***
*** end ***
```

確認したバージョン

```text
$ java --version
openjdk 18.0.2-ea 2022-07-19
OpenJDK Runtime Environment (build 18.0.2-ea+9-Ubuntu-2ubuntu1)
OpenJDK 64-Bit Server VM (build 18.0.2-ea+9-Ubuntu-2ubuntu1, mixed mode, sharing)
```