Skip to content

Instantly share code, notes, and snippets.

heetbeet /
Created March 17, 2023 07:24
VBA test valid South African ID


Tell me how to check for valid South african ID numbers. Are there checksums? It starts with yymmdd so at least you know that 009999 is an invalid start. Write a list of all things that can be considered


Valid South African ID numbers follow a specific format and contain a few checks that can be used to determine their validity. Here is a list of things you can consider when checking the validity of a South African ID number:

  1. Length: A valid South African ID number should be 13 digits long.
  2. Birthdate: The first six digits should represent the birthdate of the person in the format YYMMDD. This means that an ID number starting with "009999" would be invalid as you mentioned.
  3. Gender: The 7th to 9th digits indicate the gender of the person. A value of 0000-4999 represents a female, while 5000-9999 represents a male.
  4. Citizenship: The 10th digit represents citizenship. A value of 0 indicates a South African citizen, while 1 indicates a permanent resident.
heetbeet / emdw-deps
Created January 25, 2022 06:59
Example wrapper for g++ build tools pipeline
View emdw-deps
cur_script="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
cur_dir="$(dirname "${cur_script}")"
View Adding Fonts Without

Did you know you can install fonts without elevation?

The catch is that they're only available for the duration of your session. They are, however, available in all apps across the system.

Someone asked about how to do it on Facebook this week, and at first, I just pointed them at the install script for PowerLineFonts which loops through all the fonts in a folder and install them.

I've used this more than a few times to install some fonts, including the PowerLine ones, which are great:

$sa = New-Object -ComObject Shell.Application
heetbeet /
Last active January 11, 2021 19:00
Lazy guide for compiling Julia on Windows

Setup your environment

Get cygwin portable

  • Download and place cygwin-portable-installer.cmd in the base directory.
  • Edit cygwin-portable-installer.cmd and add the following line (for additional Cygwin dependencies) after line set CYGWIN_PACKAGES=bash-completion,...:

    set CYGWIN_PACKAGES=%CYGWIN_PACKAGES%,cmake,gcc-g++,git,make,patch,curl,m4,python3,p7zip,mingw64-i686-gcc-g++,mingw64-i686-gcc-fortran,mingw64-x86_64-gcc-g++,mingw64-x86_64-gcc-fortran (The list of packages is taken from [](
heetbeet /
Created August 26, 2020 14:18
Convert all bat files in a subdirectory to dos crlf format
find . -name '*.bat' -type f -print0 | xargs -0 unix2dos --
heetbeet / sync-time.bat
Created August 25, 2020 08:30
Manually sync microsoft time
View sync-time.bat
@echo off
if "%~1" equ "isadmin" goto :runmain
powershell "Start-Process -FilePath '%~f0' -WorkingDirectory '%~dp0' -Verb RunAs -ArgumentList isadmin"
goto :eof
net start W32Time
w32tm /resync
heetbeet /
Created August 3, 2020 19:02
Walk through windows registry
import winreg
from contextlib import suppress
import itertools
from path import Path
def subkeys(path, hkey=winreg.HKEY_CURRENT_USER):
with suppress(WindowsError), winreg.OpenKey(hkey, path, 0, winreg.KEY_READ|flags) as k:
for i in itertools.count():
heetbeet /
Created May 2, 2020 12:47
Compile this file to get a mini python.exe with auto-py-to-exe
This script mimicks part of the python executable, in order for it to be
compiled and shipped using auto-py-to-exe
import sys
import os
thisdir = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(thisdir, 'site-packages'))
sys.path.insert(0, os.path.join(thisdir))
heetbeet /
Last active February 12, 2020 14:57
When does excel use a single item from a named range v.s. all the items?
This script serves as and answer to the stack overflow question
import urllib.request
from path import Path
import collections
heetbeet /
Created December 17, 2019 19:52
Extract all email attachments from eml files
The MIT License (MIT)
Copyright (c) 2014 Patrick Olsen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in